[php-src] Issue #9644: PDO execute not correctly binding booleans

From: Date: Fri, 30 Sep 2022 07:15:45 +0000
Subject: [php-src] Issue #9644: PDO execute not correctly binding booleans
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-242499@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/9644 Author: 8ctopus ### Description The following code: ```php <?php $db = new PDO(...); $sql = <<<SQL CREATE TABLE test ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, birthday DATE NOT NULL, name VARCHAR(40) NOT NULL, salary INT NOT NULL, boss BIT NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 SQL; $query = $db->prepare($sql); $query->execute(); $sql = <<<SQL INSERT INTO test (birthday, name, salary, boss) VALUES (:birthday, :name, :salary, :boss) SQL; $query = $db->prepare($sql); $staff = [ [ 'birthday' => (new DateTime('1995-05-01'))->format('Y-m-d'), 'name' => 'Sharon', 'salary' => '200', 'boss' => TRUE, ], ]; foreach ($staff as $member) { /* works $query->bindValue('birthday', $member['birthday'], PDO::PARAM_STR); $query->bindValue('name', $member['name'], PDO::PARAM_STR); $query->bindValue('salary', $member['salary'], PDO::PARAM_INT); $query->bindValue('boss', $member['boss'], PDO::PARAM_BOOL); $query->execute(); */ // does not work $query->execute($member); } ``` Resulted in this output: ``` SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'boss' at row 1 ``` But I expected execute() not to throw an error. I clearly see the problem in the source as the parameter is always set to be a string on line 424: https://github.com/php/php-src/blob/615b8006c42715b5ea9ec61f9368582eeef8467f/ext/pdo/pdo_stmt.c#L411-L425 Can't the execute code to be updated to check for param type like in bindValue()? https://github.com/php/php-src/blob/615b8006c42715b5ea9ec61f9368582eeef8467f/ext/pdo/pdo_stmt.c#L1465-L1475 ### PHP Version 8.2.0 RC3 ### Operating System Alpine Linux

« previous php.bugs (#242499) next »