Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Oikea SQL Update lause

Sivun loppuun

pistemies [04.11.2015 21:31:15]

#

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ä.

Metabolix [04.11.2015 21:33:20]

#

Millä tavalla tämä ei toimi? Varmasti virheilmoituksessa kerrotaan (taas kerran), mikä on vikana.

pistemies [04.11.2015 21:42:27]

#

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.

Metabolix [04.11.2015 21:58:00]

#

Tässä on nyt muutama vaihtoehto:

  1. Sarake name on myös tyhjä, jolloin on loogista, että title asettuu tyhjäksi.
  2. Kyselyssä on sittenkin esimerkiksi kirjoitusvirhe, mutta et ole laittanut virheilmoituksia käyttöön. (Riippuu tietenkin siitä, millä rajapinnalla ylipäänsä ajat kyselyitä.)
  3. Kysely on jokin muu kuin edellä kirjoittamasi, jolloin kyselyssä onkin jokin logiikkavirhe, esimerkiksi vääränlainen ehto, joka ei toteudu.
  4. Koodissa on muu virhe, jonka takia päivitystä ei oikeasti edes yritetä.

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.

pistemies [04.11.2015 22:05:49]

#

Näyttäisi olevan vika tässä ehdossa:

if(strpos($sql,'INSERT') || strpos($sql,'UPDATE') ){
// päivitetään
}

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.

Metabolix [04.11.2015 22:10:04]

#

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.

pistemies [04.11.2015 22:13:54]

#

Kiitos.
Nyt tämä tomii :)

Lebe80 [05.11.2015 09:46:43]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta