msicking
27-03-2007, 15:07
Hallo,
ich habe folgendes Problem:
Ich greife mit PDO über ODBC mit dem Folgenden Skript auf eine Sybase Datenbank zu:
<?PHP
$dbh = new PDO('odbc:SERVER', 'user', 'pw');
$sql='sp_help';
print "$sql\n";
$result = $dbh->query($sql);
foreach ($result as $row)
{
print "$row[0], $row[1], $row[2]\n";
}
?>
Als Ausgabe erhalte ich wie erwartet jeweils die ersten drei Elemente jeder Zeile von sp_help.
Wenn ich allerdings als query ein:
$sql='select * from TABELLE';
nehme, bekomme ich garkeinen output.
In einem Ethereal trace habe ich allerdings gesehen, dass die daten vom Sybase server an mich gesendet werden.
Ist das delay zwischen Abfrage und Ergebniss vielleicht zu lang, so dass php denkt es kommt nichts mehr? Hab ich vielleicht beim php-kompilieren etwas falsch gemacht?
Es wäre klasse, wenn ihr mir helfen könntet.
Grüsse,
Marcel
penizillin
27-03-2007, 15:22
error_reporting() und http://de3.php.net/manual/en/function.PDO-errorCode.php ergeben irgendwas?
msicking
27-03-2007, 16:07
Hallo,
leider ergeben errorCode() und errorInfo() kein Ergebnis (0000).
Ich hab echt keine Ahnung wo der Fehler sein könnte. Die Querys werden
ja ausgeführt und die Ergebnisse (laut Ethereal) im TDS-Layer an den Client zurückgeschickt. Ich kann die richtigen Daten in Ethereal auch sehen. Es kommt halt zu keinem printout von php.
Grüsse,
Marcel
penizillin
27-03-2007, 21:20
mach mal ein var_dump von $result und von jedem $row.
msicking
28-03-2007, 14:55
Hallo, hier nochmal das gesamte skript:
<?PHP
error_reporting(E_ALL);
$dbh = new PDO('odbc:SERVER', 'user', 'passwort');
#$sql='sp_help';
$sql='select * from tabelle';
print "$sql\n";
$result = $dbh->query($sql);
echo "\nPDO::errorCode(): ";
print_r($dbh->errorCode());
echo "\nPDO::errorInfo(): ";
print_r($dbh->errorInfo());
print "\nvar_dump von result\n";
var_dump($result);
foreach($result as $row)
{
print "var_dump von row\n";
var_dump($row);
print "$row[0], $row[1], $row[2]\n";
}
?>
und hier die Ausgabe des Skripts:
select * from tabelle
PDO::errorCode(): 00000
PDO::errorInfo(): Array
(
[0] => 00000
[1] => 0
[2] => ((null)[0] at (null):0)
[3] =>
)
var_dump von result
object(PDOStatement)#2 (1) {
["queryString"]=>
string(81) "select * from tabelle"
}
Es wird also garnichts in das Array reingeschrieben, und die Schleife dementsprechend nicht durchlaufen.
Bei einem sp_help als query enthält die Ausgabe des zweiten var_dumps
dann entsprechend die richtigen elemente.
penizillin
28-03-2007, 15:00
http://de3.php.net/manual/en/function.PDO-query.php If you do not fetch all of the data in a result set before issuing your next call to PDO->query(), your call may fail. Call PDOStatement->closeCursor() to release the database resources associated with the PDOStatement object before issuing your next call to PDO->query().
versuchs mal mit einem prepared statement (PDO->prepare() und ->execute()).
msicking
30-03-2007, 01:31
Jo, danke.
Ich werds am Dienstag ausprobieren. Bin leider erst dann wieder auf der Arbeit. Ich melde mich dann auf jeden Fall.
Grüsse,
Marcel
msicking
03-04-2007, 14:22
Hallo,
leider hat die Benutzung von prepare() und execute() das selbe Ergebnis.
Hier nochmal das Skript
<?PHP
error_reporting(E_ALL);
$dbh = new PDO('odbc:SERVER', 'USER', 'PASSWORT');
#$sql='sp_help';
$sql='select * from tabelle';
print "$sql\n";
$stmt = $dbh ->prepare($sql);
$stmt ->execute();
while ($row=$stmt->fetch())
{
print_r($row);
}
echo "\nPDO::errorInfo(): ";
print_r($dbh->errorInfo());
print "\nvar_dump von result\n";
?>
mit der Ausgabe:
select * from tabelle
PDO::errorInfo(): Array
(
[0] => 00000
[1] => 0
[2] => ((null)[0] at (null):0)
[3] =>
)
var_dump von result
Ich habe das "Gefühl", dass PDO soweit eigentlich funktioniert, PHP aber irgendwie abbricht. Ich hab hier mal den configure-befehl. Kannst du das was falschen dran sehen?
./configure --with-gd --with-odbc --with-config-file-path=/etc --with-unixODBC=/usr/ --enable-pdo --with-zlib --with-pdo-odbc=unixODBC,/usr --with-jpeg --with-apxs2=/usr/local/apache2/bin/apxs --without-sqlite --with-mysql
Grüsse,
Marcel Sicking
Errors mal direkt nach prepare und execute abgefragt?
msicking
03-04-2007, 15:53
Eine Ausgabe mit errorcode() nach dem prepare und nach dem execute ergeben jeweils ein 0000, also leider nichts :-(
Ich hab auch diesmal wieder die Abfrage an der Datenbank mit ehtereal nachvervolgen können. Die Daten scheinen korrekt an PHP "geliefert" zu werden. Aber nichts wird ausgegeben.