Edit report at https://bugs.php.net/bug.php?id=64132&edit=1
ID: 64132 Comment by: kenji dot uui at gmail dot com Reported by: ipernet at gmail dot com Summary: PDO/MySQL query fails when binding a float value with data type PDO::PARAM_INT Status: Open Type: Bug Package: PDO related Operating System: Slackware 13 x64 PHP Version: 5.4.11 Block user comment: N Private report: N New Comment: Disabling emulation of prepared statements makes no error. $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); Previous Comments: ------------------------------------------------------------------------ [2013-03-12 15:23:25] u...@php.net Yet another PDO core bug that is not a MySQL bug... PDO converts 1.25 to 1,25 as part of the statement emulation, puts 1,25 in the statement string and your query becomes INSERT INTO (col) VALUES (1,25). ------------------------------------------------------------------------ [2013-02-11 09:51:29] ipernet at gmail dot com Important note: This only happens if the set locale use a comma as decimal separator. Please add "setlocale(LC_ALL, 'fr_FR');" at the beginning of the test code to reproduce. This is still an unexpected behavior. ------------------------------------------------------------------------ [2013-02-02 15:14:14] ipernet at gmail dot com Description: ------------ PHP: 5.4.11 PDO Client API version: mysqlnd 5.0.10 - 20111026 - $Id: b0b3b15c693b7f6aeb3aa66b646fee339f175e39 $ MySQL: 5.5.18-log Using a PDO prepared statement to insert a new row, the query fails if a float value is passed for a token and this token use PDO::PARAM_INT as data type. Test script: --------------- CREATE TABLE IF NOT EXISTS `test` ( `kms` int(10) unsigned NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; ------------------------------------------- $query = $dbh->prepare('INSERT INTO test(kms) VALUES(:kms)'); $query->bindValue(':kms', 1.25, PDO::PARAM_INT); $query->execute(); var_dump($query->errorInfo()); Expected result: ---------------- - "1" should be inserted in the table - Query should execute properly and do not lead to a SQL parsing error. Actual result: -------------- array(3) { [0] => string(5) "21S01" [1] => int(1136) [2] => string(47) "Column count doesn't match value count at row 1" } ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=64132&edit=1