Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: merkkijono tai null

B_R_H [05.07.2010 12:57:26]

#

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!

Grez [05.07.2010 13:15:07]

#

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()

B_R_H [05.07.2010 13:48:38]

#

>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

Vastaus

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

Tietoa sivustosta