Edit report at http://bugs.php.net/bug.php?id=52746&edit=1

 ID:                 52746
 User updated by:    damien at tournoud dot net
 Reported by:        damien at tournoud dot net
 Summary:            SQLite error "bind or column index out of range"
                     with some placeholders
 Status:             Open
 Type:               Bug
 Package:            SQLite related
 PHP Version:        5.3.3
 Block user comment: N

 New Comment:

This seems to work properly with unnamed placeholders.



For named placeholders, it seems to only fail when the placeholder is
part of a branch of the query that is deadcode, and could potentially be
removed by the optimizer:



FAILS: SELECT SUM(1) expression FROM (SELECT :value value FROM
sqlite_master) my_table

PASS: SELECT SUM(value) expression FROM (SELECT :value value FROM
sqlite_master) my_table


Previous Comments:
------------------------------------------------------------------------
[2010-08-31 11:15:22] damien at tournoud dot net

That's on Debian, so it is using the system library. I'm able to
reproduce that behavior on a wide range of PHP and SQLite versions:



PHP 5.2.6-1+lenny9 -- SQLite 3.5.9 (external)

PHP 5.3.2-0.dotdeb.2 -- SQLite 3.6.21 (external)

PHP trunk -- SQLite 3.7.0.1 (bundled)

------------------------------------------------------------------------
[2010-08-31 10:46:49] paj...@php.net

hi Damien,



Do you use the bundled sqlite or a system version? If the latter, which
version is it?

------------------------------------------------------------------------
[2010-08-30 20:20:28] damien at tournoud dot net

Description:
------------
The following snippet results in a PDOException with message
"SQLSTATE[HY000]: General error: 25 bind or column index out of range".



For some reasons, relatively similar queries work (for example, without
the aggregation, as in: "SELECT * FROM (SELECT :value value FROM
sqlite_master) my_table" or without the table as in "SELECT COUNT(*)
expression FROM (SELECT :value value) my_table").





Test script:
---------------
<?php

$db = new PDO('sqlite:/tmp/sqlite.db');

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);



$query = $db->prepare('SELECT COUNT(*) expression FROM (SELECT :value
value FROM sqlite_master) my_table');

$query->execute(array(':value' => 'my_value'));

?>



------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=52746&edit=1

Reply via email to