Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  PDO tühi päring märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
caspar21
HV vaatleja

liitunud: 28.12.2003




sõnum 19.12.2011 01:06:50 PDO tühi päring vasta tsitaadiga

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
echo $a->id;

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
vaata kasutaja infot saada privaatsõnum
Valdars
HV veteran
Valdars

liitunud: 22.02.2003




sõnum 19.12.2011 03:02:52 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
caspar21
HV vaatleja

liitunud: 28.12.2003




sõnum 19.12.2011 04:58:59 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
karu
HV kasutaja

liitunud: 08.08.2002




sõnum 19.12.2011 10:00:30 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  PDO tühi päring
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
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.