ID: 47960 User updated by: dan dot franklin at pearson dot com Reported By: dan dot franklin at pearson dot com Status: Bogus Bug Type: PDO related Operating System: RHEL 5.3 PHP Version: 5.2.9 New Comment:
No, the safe choice for PDO would be to use the native PHP type of the variable, where there is a corresponding SQL type. That would be sensible default behavior. I changed my PDO interface library to do this and it works perfectly. PDO ought to work the same way. Previous Comments: ------------------------------------------------------------------------ [2009-09-23 20:15:20] u...@php.net You are not telling PDO what type your parameter is and it defaults to the safe choice of string. PDO escapes the string and you get the error. Specify INT and it works. ------------------------------------------------------------------------ [2009-04-30 06:20:44] balagod at gmail dot com Hi, i faced same problem. i converted my parameters as integer using typecast (int) it's working. $stcount=(int)$_POST['stcount']; $ecount=10; $selQry="SELECT * from TABLE where status=1 order by add_date limit :offset,:rowcount"; $stmt=$conn->prepare($selQry); $stmt->bindParam(':offset',$stcount,PDO::PARAM_INT); $stmt->bindParam(':rowcount',$ecount,PDO::PARAM_INT); $stmt->execute(); ------------------------------------------------------------------------ [2009-04-13 13:50:53] dan dot franklin at pearson dot com Description: ------------ In moving from PHP 5.1.6 to 5.2.9 I've lost the ability to bind to a LIMIT or OFFSET parameter against MySQL 5.0; that is, if I have ... LIMIT ? or ... OFFSET ? it fails with You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''3'' at line 1 (where "3" is the actual value of the parameter bound to the ?). Reproduce code: --------------- <?php $dsn = "mysql:host=localhost;dbname=test"; $dbh = new PDO($dsn, '', '', array()); run_PDO($dbh, "CREATE TABLE t (n int)", array()); run_PDO($dbh, "select n FROM t LIMIT ?", array(3)); run_PDO($dbh, "select n FROM t LIMIT 3 OFFSET ?", array(3)); run_PDO($dbh, "DROP TABLE t", array()); function run_PDO($dbh, $sql, $params) { $stmt = $dbh->prepare($sql); if (!$stmt) { $i = $dbh->errorInfo(); print "Preparing \"$sql\" failed: $i[2]\n"; } else if (!$stmt->execute($params)) { $i = $stmt->errorInfo(); print "Executing \"$sql\" failed: $i[2]\n"; } else { print "\"$sql\" succeeded\n"; } } ?> Expected result: ---------------- "CREATE TABLE t (n int)" succeeded "select n FROM t LIMIT ?" succeeded "select n FROM t LIMIT 3 OFFSET ?" succeeded "DROP TABLE t" succeeded (This is what happens with PHP 5.1.6 MySql 5.0.45) Actual result: -------------- "CREATE TABLE t (n int)" succeeded Executing "select n FROM t LIMIT ?" failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''3'' at line 1 Executing "select n FROM t LIMIT 3 OFFSET ?" failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''3'' at line 1 "DROP TABLE t" succeeded (With PHP 5.2.9 MySQL 5.0.77) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=47960&edit=1