Hei,
Tämä lienee ihan triviaalia, mutta en nyt vaan hoksaa (lomaa odotellessa...).
Useammassa kohdassa on viime päivinä tullut vastaan sama asia. Onko tähän olemassa jokin funktio tai onko ideaa. Kantana Postgres 8.1.
<?php $id=12345; $malli="Volvo"; $selite="Selitysteksti"; $lisaa="insert into autot (id, malli, teksti) values (".$id.",'".$malli."','".$selite."');"; echo $lisaa."\n"; // --> Tämä toimii siis ihan ok: // insert into autot (id, malli, teksti) values (12345,'Volvo','Selitysteksti'); $id=12346; $malli="Volvo"; $selite=NULL; $lisaa="insert into autot (id, malli, teksti) values (".$id.",'".$malli."','".$selite."');"; echo $lisaa."\n"; // --> Jos kenttä on NULL, tuo ei mene kantaan (Null kelpaisi). // insert into autot (id, malli, teksti) values (12345,'Volvo',''); $id=12347; $malli="Volvo"; $lisaa="insert into autot (id, malli, teksti) values (".$id.",'".$malli."',NULL);"; echo $lisaa."\n"; // --> Jos lauseessa on tekstinä NULL, toimii ok. // insert into autot (id, malli, teksti) values (12345,'Volvo',NULL);
Ongelmani on siis se, jos kentän arvo on NULL, sql-lauseessa on mukana hipsut (''), joita ei pitäisi olla. Tietenkin tämän voisi rakentaa if (empty($muuttuja)), mutta pitkä lause tulee aika kryptiseksi.
Kiitos etukäteen!
No tuossahan on se, että kun kerran olet päättänyt että teet kaiken itse käsipelillä, niin silloin siinä on tietenkin enemmän hommaa. Eli lausekkeista tulee pitkiä ja kryptisiä jos niitä ei jaa useammalle riville.
Paremman ja tietoturvallisemman saisit, kun käyttäisit parametrisoituja kyselyjä, ja pääsisit lisäksi itse helpommalla (esimerkiksi sen suhteen että nullit menee suoraan).
Kannattaa myös huomata että empty() palauttaa true monessa muussakin tapauksesssa kuin null:in tapauksessa. Esim. "", "0", FALSE ovat "empty". Oikea funktio nulliuden tarkistamiseen olisi is_null()
>Paremman ja tietoturvallisemman saisit, kun käyttäisit parametrisoituja
>kyselyjä, ja pääsisit lisäksi itse helpommalla (esimerkiksi sen suhteen
>että nullit menee suoraan).
>
Hyvä vinkki! Ei heti tullut mieleeni. Mistä mahtaisi löytää hyvän mallin?
>Kannattaa myös huomata että empty() palauttaa true monessa muussakin
>tapauksesssa kuin null:in tapauksessa. Esim. "", "0", FALSE ovat "empty".
>Oikea funktio nulliuden tarkistamiseen olisi is_null()
>
Yep. Olet oikeassa, oli vähän oikaistu.
BRH
Aihe on jo aika vanha, joten et voi enää vastata siihen.