ID: 41622 User updated by: andrea dot spacca at gmail dot com Reported By: andrea dot spacca at gmail dot com -Status: Feedback +Status: Open Bug Type: PDO related Operating System: Linux PHP Version: 5.2.3 New Comment:
> Binds are processed by the database drivers (where available), so > $tmp->queryString contains original query, not the processed one. i thought that PDOStatement::queryString will change will executing the PDOStatement. > And you code works just fine when table > exists and contains requested data. obviously it isn't so, otherwise i hadn't open the bug i haven't yet tested it on another enviroment, but on the one i'm working it doesn't work. have i to open another bug showing the difference making the query strainght with no binding and without it? (the first works, not the latter) Previous Comments: ------------------------------------------------------------------------ [2007-06-07 10:04:02] [EMAIL PROTECTED] >$tmp->quetryString haven't the :placeholder binded to the value >passed in execute(), so the query won't be a valid one and >$tmp->fetchAll() will be empty Binds are processed by the database drivers (where available), so $tmp->queryString contains original query, not the processed one. And you code works just fine when table exists and contains requested data. ------------------------------------------------------------------------ [2007-06-07 10:03:59] andrea dot spacca at gmail dot com i haven't put the example in the code but the problem raises both with named and "anonymous" placeholders ------------------------------------------------------------------------ [2007-06-07 09:54:57] andrea dot spacca at gmail dot com in expected result the var_dumped array should be: array(1) { [0]=> array(2) { ["field"]=> string(1) "1" [0]=> string(1) "1" } } ------------------------------------------------------------------------ [2007-06-07 09:53:44] andrea dot spacca at gmail dot com Description: ------------ Binding params to placeholders in prepared query don't work (i tested the script both cli and in apache enviroment) [pdo_mysql] PDO Driver for MySQL, client library version => 5.0.34 [pdo_sqlite] PDO Driver for SQLite 3.x => enabled PECL Module version => 1.0.1 SQLite Library => 3.3.17 Reproduce code: --------------- try { $sql = 'SELECT field FROM table WHERE field = :placeholder LIMIT 0, 1'; $db = new PDO([...]); $tmp = $db->prepare($sql); $tmp->execute(array(':placeholder' => 1)); var_dump($tmp->queryString); var_dump($tmp->fetchAll()); $db = NULL; } catch (Exception $e) { var_dump($e); } Expected result: ---------------- $tmp->queryString should contain the :placeholder binded to the value passed in execute(), and (as far as the query will produce row result from the db) $tmp->fetchAll() should contain the resulted row expected output: string(61) "SELECT field FROM table WHERE field = 1 LIMIT 0, 1" array(1) { [0]=> array(2) { ["field"]=> string(1) "1" [0]=> string(1) "1" ["urlString"]=> string(44) "http://comequandofuoripiove.leonardo.it/foto" [1]=> string(44) "http://comequandofuoripiove.leonardo.it/foto" ["scheme"]=> string(4) "http" [2]=> string(4) "http" ["dominio"]=> string(32) "comequandofuoripiove.leonardo.it" [3]=> string(32) "comequandofuoripiove.leonardo.it" ["insertTimestamp"]=> string(13) "1177596562453" [4]=> string(13) "1177596562453" ["diffChk"]=> string(1) "1" [5]=> string(1) "1" } } Actual result: -------------- $tmp->quetryString haven't the :placeholder binded to the value passed in execute(), so the query won't be a valid one and $tmp->fetchAll() will be empty the same happens using PDOStatement::bindValue() or PDOStatement::bindParam() the result seems not being related to a specific db driver (i tested with mysql and sqlite) no exception is raised script output: string(61) "SELECT * FROM table WHERE field = :placeholder" array(0) { } ps: if i remove the placeholder from prepare() and then try to still bind a value in execute() an exception is raised: "SQLSTATE[HY000]: General error: 25 bind or column index out of range" ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=41622&edit=1