praegune kellaaeg 19.06.2025 10:34:47
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
caspar21
HV vaatleja
liitunud: 28.12.2003
|
19.12.2011 01:06:50
PDO tühi päring |
|
|
Hetkel teen andmebaasi seesuguse päringu
// Andmebaasis eksisteerib rida ID-ga 5
$a = $db->query('SELECT * FROM tbl1 WHERE id = 5')->fetchObject(); |
ning seejärel
siis on asi korras. Aga mul on vajadus saada sealt niiöelda tühi päring, kus ma teen
// Andmebaasis pole kirjet ID-ga 0
$a = $db->query('SELECT * FROM tbl1 WHERE id = 0')->fetchObject(); |
ning kui echoda seda, saan veateate:
Notice: Trying to get property of non-object |
Varem tegin sama asja mysql_fetch_assoc-ga ja siis kõik justkui toimis.
Kas on võimalik kuidagi luua puuduolevad objektid või fixida seda muul moel?
|
|
tagasi üles |
|
 |
Valdars
HV veteran

liitunud: 22.02.2003
|
19.12.2011 03:02:52
|
|
|
Kui ridu tagasi ei tule, siis ei tagastatagi mingit objekti vaid hoopis false. Ehk enne kui sa proovid mingit objekti propertit lugeda kontrolli, kas see objekt on olemas.
|
|
Kommentaarid: 47 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
44 |
|
tagasi üles |
|
 |
caspar21
HV vaatleja
liitunud: 28.12.2003
|
19.12.2011 04:58:59
|
|
|
Valdars kirjutas: |
Kui ridu tagasi ei tule, siis ei tagastatagi mingit objekti vaid hoopis false. Ehk enne kui sa proovid mingit objekti propertit lugeda kontrolli, kas see objekt on olemas. |
Mul on süsteem üles ehitatud nii:
$a = $db->query('SELECT * FROM tbl1 WHERE id = ' . $_GET['id'])->fetchObject();
echo '<input type="text" value="' . $a->nimi . '" name="nimi" />';
echo '<input type="text" value="' . $a->elukoht . '" name="elukoht" />';
echo '<input type="text" value="' . $a->midagiveel . '" name="midagiveel" />';
... |
Tegelen just üleminekuga PDO-le. Eks eesmärk ole ka vähem koodi kirjutada.
Ridu on üle koodi laiali mitusada. Mul pole vast mõtet igat $a-> ümber muuta miskiks isset($a->)-ks või (string)$a-> -ks. Siis ta muidugi töötaks aga ei taha niipalju tähemärke juurde saada.
Ma oleks nagu kuskilt blogist selle PDO kohta lugenud, et SELECTiga on võimalik automaatselt need objektid tekitada(olgugi, et tühjalt). Kui pole selline asi veel võimalik eks siis muud pole kui kasutada arraydena ( $db->fetch() ) alternatiivi.
|
|
tagasi üles |
|
 |
karu
HV kasutaja
liitunud: 08.08.2002
|
19.12.2011 10:00:30
|
|
|
caspar21 kirjutas: |
Mul on süsteem üles ehitatud nii:
$a = $db->query('SELECT * FROM tbl1 WHERE id = ' . $_GET['id'])->fetchObject();
... |
Tegelen just üleminekuga PDO-le. Eks eesmärk ole ka vähem koodi kirjutada. |
Kui kasutad PDO'd, siis kasuta juba täiel määral.
$stmt = $db->prepare('SELECT * FROM tbl1 WHERE id = ?');
$stmt->execute(array($_GET['id']));
$a = $stmt->fetchObject(); |
caspar21 kirjutas: |
Ridu on üle koodi laiali mitusada. Mul pole vast mõtet igat $a-> ümber muuta miskiks isset($a->)-ks või (string)$a-> -ks. |
if(empty($a)){
$a=new stdClass();
$a->nimi='';
...
} |
arrayde kasutamisega pead samamoodi tekitama $a=array('nimi'=>'', ...) kui fetch() midagi ei väljasta, et vigu vältida.
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|