PDO Prepared Statement - Zugriff auf Oracle liefert kein Ergebnis

mccoke

Grünschnabel
Hallo,

ich habe da mal wieder ein Problem mit PDO. Wenn ich eine "normale" Abfrage auf die
Oracle-Datenbank durchführe, bekomme ich ein Ergebnis.

"normale" Abfrage:

PHP:
try {
	$artnr="10277";
        $dbh = new PDO("oci:dbname=db", "scott", "tiger");

      foreach ($dbh->query("SELECT BESTAND FROM TABELLE WHERE ARTIKEL=$artnr)  as $row) {
             print_r($row);
      }
      $dbh = null;

} catch (PDOException $e) {
   print "Error!: " . $e->getMessage() . "<br/>";
   die();
}

...mit prepared Statements bekomme ich nun leider überhaupt nichts zurückgeliefert. Weder eine Fehlermeldung noch ein Ergebnis.

prepared Statement:

PHP:
 try {
	$artnr="10277";
        $dbh = new PDO("oci:dbname=db", "scott", "tiger");
        $stmt = $dbh->prepare(SELECT BESTAND FROM TABELLE WHERE ARTIKEL=?);
		$stmt->bindParam(1,$artnr);
		
		$stmt->execute();
		$row = $stmt->fetch();
                print_r($row);
	    
		$dbh = null;		

} catch (PDOException $e) {
   print "Error!: " . $e->getMessage() . "<br/>";
   die();
}

So, ich hoffe Ihr könnt mir mal wieder weiterhelfen!

MfG

Mc Coke
 
Morgen,

also was mir zu Beginn auffällt ist, dass

Code:
$stmt = $dbh->prepare(SELECT BESTAND FROM TABELLE WHERE ARTIKEL=?);

so aussehen müsste.

Code:
$stmt = $dbh->prepare("SELECT BESTAND FROM TABELLE WHERE ARTIKEL = ? ");

Liefert er denn einen Fehler?
 
Sorry, habe ich falsch reinkopiert....

Obwohl ich PDOException abfange, erhalte ich kein Fehlermeldung..
 
Hast du mal geschaut, was dir $stmt->prepare zurückliefert?
Es müsste ein Objekt vom Typ Statement.

So würde ich Zeile für Zeile mal durchgehen.

Unten würde ich es noch so machen:

PHP:
foreach($stmt->fetch() as $row) {
  var_dump($row);
}

Probier mal aus u. sag was er ausgibt, falls es Online ist kannst du ja auch die URL mal angeben.
 
PHP:
      print_r($stmt);

liefert folgendes:


PDOStatement Object ( [queryString] => SELECT BESTAND FROM TABELLE WHERE Artikel= ?)


mit

PHP:
foreach($stmt->fetch() as $row) {
  var_dump($row);
}

liefert er folgende Fehlermeldung:


PHP:
Warning: Invalid argument supplied for foreach()

Ich denke mal, dass fetch() kein Ergebnis liefert und deshalb die Fehlermeldung kommt.

Ich bin in einer lokalen Testumgebung... steht also leider nicht online :-(
 
Dein fetch() liefert dir kein Array, deshalb kommt dieser Fehler.

Gib mal noch $stmt->execute(); aus, was er da liefert.
 
Ja, die Artikelnummer ist vorhanden. Wie schon beschrieben liefert die obere Abfrage ja ein Ergebnis. Kann es evtl. mit der Oracle-Datenbankversion zusammenhängen? Die Version ist 9.2.
 
Also mit Oracle kenn ich mich nicht aus.

Aber die 1 besagt ja, dass es erfolgreich ausgeführt wurde.

Kannst ja mal mit $stmt->fetch_all() testen und ausgeben lassen.

Ansonsten nimm halt kein prepared Statement, sondern bau die das SQL-Query einfach normal zusammen.
 
Zurück