Onkohan minulla unhotunut tämä kun ei toimi
UPDATE `mytable` SET `title` = `name`;
Tarkoitus on siis päivittää sarake title sarakkeen name sisällöllä.
Millä tavalla tämä ei toimi? Varmasti virheilmoituksessa kerrotaan (taas kerran), mikä on vikana.
Kenttä title jää tyhjäksi.
Virheilmoitusta ei tule ... eikä pysäytä ohjelman ajoa. Tämä ehkä johtuu siitä että lähetän ajaxilla siirron tuolle skriptille.
Ehkä pitää yrittää ajaa se suoraan php-sivulla. Sql lauseet tulostuu siellä ihan oikein, sen verran olen testannut.
Tässä on nyt muutama vaihtoehto:
Se nyt pitäisi jo tietää, että SQL-kyselyn suoritus ei ole mitenkään riippuvainen siitä, onko sivunlataus tehty suoraan selainikkunassa vai AJAXilla vai vaikka komentoriviltä käsin netcatilla. Tietysti jos tarkoitit, että virheilmoitus jää AJAXin takia näkemättä, ongelma ratkeaa yksinkertaisesti, kun vain avaat selaimen kehittäjäkonsolin ja katsot sieltä, millainen vastaus AJAX-pyyntöön tulee. Myös virheilmoitusten tallennus lokitiedostoon (tai tietokantaan) on usein käytännöllistä niin kehitys- kuin tuotantovaiheessakin.
Näyttäisi olevan vika tässä ehdossa:
Noissa mitkä ei toimi, sana "UPDATE" on aivan sql-lauseen alussa. Niissä jotka toimii, lauseen alku on tyhjä, koska ne on kopsattu skriptistä, joka tulosti ne sivulle pre-elementin avulla ja siksi siinä on vähän muotoilua.
Jos osuma on alussa, strpos palauttaa luvun 0, mutta jos osumaa ei ole, strpos palauttaa arvon false. Suoraan ehtoon laitettuna myös nollasta tulee false, ja siksi nykyinen koodisi toimii väärin. Ehdoissa pitäisi lukea strpos(...) !== false
, eli pitäisi erikseen verrata paluuarvoa nimenomaan falseen.
Debuggauksena olisi siis ollut fiksua tarkistaa ensin, ajetaanko kyselyä ollenkaan, eikä suoraan hypätä yksinkertaisen kyselyn syyttämiseen.
Kiitos.
Nyt tämä tomii :)
Jatkossa, tarkista ihan vaikka tulostamalla ruudulle ehtolauseiden sisällä jotain, jotta näet ajetaanko kyseisen ehdon sisällä olevaa koodia. Nythän siis oletit, että virhe oli sql-lauseessa, jonne ei missään vaiheessa edes päästy.
Aihe on jo aika vanha, joten et voi enää vastata siihen.