hawkmaster: Erklärungsversuch, fetch() bringt nichts zurück?

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

  1. 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

  2. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. 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