Edit report at http://bugs.php.net/bug.php?id=52637&edit=1
ID: 52637 Updated by: [email protected] Reported by: angelo dot courtel at laposte dot net Summary: bug in prepare statement Status: Open Type: Bug Package: PDO related Operating System: Debian Lenny PHP Version: 5.2.6-1+lenny6 Block user comment: N New Comment: Your "//works fine" code sample should do exactly nothing because there is no SQL statement run. The SQL statement is commented out. No "predifining" of any kind should happen. Previous Comments: ------------------------------------------------------------------------ [2010-09-07 21:44:13] angelo dot courtel at laposte dot net Well, but I want find a way to use a prepared statement, without need to predeclare all paramètres on a sql comment ! It s not a very optimized solution. ------------------------------------------------------------------------ [2010-09-06 15:13:59] [email protected] Well, if you comment out your SQL statement, it should work fine regardless what it may look like... "-- " starts a single line SQL comment. ------------------------------------------------------------------------ [2010-08-19 10:06:12] angelo dot courtel at laposte dot net A little example for explain my bug : This source works correctly on an Windows WAMP PHP5.2.6 But not on Debian :( <?php //running on PHP Version 5.2.6-1+lenny6 try { $dbh = new PDO('pgsql:host=localhost;port=5432;dbname=db;user=user;password=pass'); } catch (PDOException $e) { echo 'Connexion failed : ' . $e->getMessage();exit; } //list or parameters $id = 40; $id2 = 40; $param = array (':id' => $id, ':id2' => $id2); //query failed $sReq = ' select * from t1 left join t2 on t2.id = :id left join t3 on t3.id = :id where t1.id = :id2'; $rTest1 = $dbh->prepare($sReq); if ($rTest1->execute($param)) echo 'OK'; else var_dump($rTest1->errorInfo()); // --> array(3) { [0]=> string(5) "42P18" [1]=> int(7) [2]=> string(69) "ERREUR: n'a pas pu déterminer le type de données du paramètres $2" } $rTest2 = $dbh->prepare($sReq); $rTest2->bindParam(':id', $id); $rTest2->bindParam(':id2', $id2); if ($rTest2->execute()) echo 'OK'; else var_dump($rTest2->errorInfo()); // --> array(3) { [0]=> string(5) "42P18" [1]=> int(7) [2]=> string(69) "ERREUR: n'a pas pu déterminer le type de données du paramètres $2" } //query success $sReq = ' -- :id :id2 select * from t1 left join t2 on t2.id = :id left join t3 on t3.id = :id where t1.id = :id2'; $rTest3 = $dbh->prepare($sReq); if ($rTest3->execute($param)) echo 'OK'; else var_dump($rTest3->errorInfo()); // --> OK $rTest4 = $dbh->prepare($sReq); $rTest4->bindParam(':id', $id); $rTest4->bindParam(':id2', $id2); if ($rTest4->execute()) echo 'OK'; else var_dump($rTest4->errorInfo()); // --> OK ?> ------------------------------------------------------------------------ [2010-08-19 06:55:59] angelo dot courtel at laposte dot net Hi, I use PostGreSql Pdo driver Thks ------------------------------------------------------------------------ [2010-08-19 01:17:32] [email protected] What PDO driver are you using? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/bug.php?id=52637 -- Edit this bug report at http://bugs.php.net/bug.php?id=52637&edit=1
