Erklärungsversuch, fetch() bringt nichts zurück?
hawkmaster
- datenbank
Hallo zusammen,
ich mache gerade meine ersten Schritte mit PDO.
Folgendes Konstrukt funktioniert nicht wenn in der Tabelle "test" mit der TestID = 10 was gefunden wird.
$result = $DBO->query("SELECT * FROM test WHERE TestID = '10'");
if ($result->fetchColumn() == 0) {
$result = $DBO->query("SELECT * FROM test WHERE TestID = '0'") ;
}
$sql = $result->fetch(PDO::FETCH_ASSOC);
Nur das ich es richtig verstehe:
Ist es so das das letzte "fetch(PDO::FETCH_ASSOC)" nichts zurückgibt bzw. findet weil der "$result" nicht mehr mit dem "Select" "verbunden" ist sondern mit "fetchColumn"?
Könnte man es so erklären?
Wie würdet ihr Experten es machen wenn man zuerst schauen wollte, ob ein Datensatz bei der TestID = 10 vorhanden ist. Wenn ja bringe mir die Daten, wenn nein hole mir die Daten wo TestID = 0 ist?
vielen Dank
Gruss
hawk
Hi,
mach doch mal
SELECT COUNT(*) FROM tabelle WHERE {Bedingung}
Das sollte dir einen Wert >= 0 zurückliefern ... also eigentlich immer ein Ergebnis.
Cheers, Frank
Hi,
Wie würdet ihr Experten es machen wenn man zuerst schauen wollte, ob ein Datensatz bei der TestID = 10 vorhanden ist. Wenn ja bringe mir die Daten, wenn nein hole mir die Daten wo TestID = 0 ist?
SELECT testid FROM test WHERE testid IN (10,0) ORDER BY testid DESC LIMIT 1
Alles in einem Aufwasch. Und natürlich nicht mit *, sondern mit expliziter Angabe der gewünschten Spalten.
cu,
Andreas
Hallo zusammen,
vielen Dank an euch für die Hilfe und Tipps.
ich weiss das das Code Beispiel nicht gerade optimal ist und auch das man kein * verwenden soll.
Mir ging es vor allem eigentlich um das "warum" bringt der letzte "fetch" nichts zurück?.
Wenn man das ganze mit mysql() Funktionen machen würde, geht folgendes:
$result = mysql_query("SELECT * FROM test WHERE TestID = '{$row[TestID]}'") ;
$found = mysql_num_rows($result);
if($founddepid == 0){
$result = mysql_query("SELECT * FROM test WHERE TestID = '0'");
}
$sql = mysql_fetch_array($result);
Hier ist das "mysql_fetch_array" auf $result möglich.
Warum geht im PDO Beispiel das nicht:
$sql = $result->fetch(PDO::FETCH_ASSOC);
Es würde ja auch folgendes nicht gehen: (mal abgesehen das es keinen Sinn macht)
$sql = $result->fetch(PDO::FETCH_ASSOC);
$sql = $result->fetchAll();
Ist es so das "$result" schon "belegt" (oder verbraucht?) ist?
viele Grüße
hawk