Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PDO LIKE kyselyn muotoilu

pula_aho [29.12.2011 10:58:51]

#

Olen käyttänyt haussa tapaa

$sql  = "SELECT * FROM toimittaja WHERE name LIKE '%$_POST[name]%'";

ja toimii fiksusti.
Miten teen saman PDO:lla??
Mihin ja miten sijoitan tuon lomakkeelta tulevan $_POST[name]

Hennkka [29.12.2011 12:00:14]

#

Ei testattu:

$sql = "SELECT * FROM toimittaja WHERE name LIKE ?";
$kysely = $yhteys->prepare($sql);
kysely->execute(array($_POST[name]);

Tämä torjuu myös sql-injektion, jota sinun koodisi (tuon perusteella) ei tee. Olisit voinut myös vilkaista Putkan oppaisiin, siellä tämä tieto olisi ollut suoraan.

makumaku [29.12.2011 12:37:15]

#

Edellinen ei toimine ihan suoraan koska tuosta puuttuu yksi sulku kiinni.

On myös asiallista käyttää assosiatiivisen taulukon alkioiden kanssa heitto/lainausmerkkejä. Vaikka ylläoleva koodi toimiikin käytännössä, niin PHP törmää ensin määrittelemättömään defineen name, ja arvaa sitten sen jälkeen että tuo voisi tarkoittaa indeksiä "name".
Jos PHP:ssä on kaikki varoitukset päällä, niin tuosta pitäisi tulla herja.
Eli siis $_POST["name"] on suositeltavaa.

Metabolix [29.12.2011 13:35:35]

#

Lisäksi koodista puuttuvat ne %-merkit, jotka tässä varmaan ihmetystä aiheuttivatkin. PDO ei kuitenkaan puutu niihin (eikä muihinkaan wildcard-merkkeihin), vaan ne voi syöttää suoraan:

$kysely->execute(array("%{$_POST["name"]}%"));

Vastaus

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

Tietoa sivustosta