Open
Description
proxysql version:
ProxySQL version 1.4.15-1-g61bc777, codename Truls
2020-05-20 15:59:41 MySQL_Session.cpp:2887:handler(): [ERROR] Detected a broken connection during query on (1,10.200.131.4,3306) , FD (Conn:43 , MyDS:43) : 2057, The number of parameters in bound buffers differs from number of columns in resultset
2020-05-20 15:59:43 MySQL_PreparedStatement.cpp:315:update_metadata(): [WARNING] Updating metadata for stmt 1 , user sbtest_rw, query SELECT * FROM sbtest1 WHERE id =?
2020-05-20 15:59:43 MySQL_Session.cpp:2452:handler(): [ERROR] RECEIVED AN UNKNOWN COMMAND: 28 -- PLEASE REPORT A BUG
replay process:
prepare.php
<?php
$dsn = 'mysql:dbname=sbtest;host=10.200.131.3;port=6033';
$user = 'sbtest_rw';
$password = 'sbtest_rw_123';
try {
$params = [
PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8",
PDO::ATTR_EMULATE_PREPARES => false,
];
$db = new PDO($dsn, $user, $password, $params);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
$sth = $db->prepare('SELECT * FROM sbtest1 WHERE id =?');
$sth->execute([28]);
$res1 = $sth->fetchAll(PDO::FETCH_ASSOC);
print_r($res1);
?>
table :
CREATE TABLE `sbtest1` (
`id` int(10) unsigned NOT NULL,
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`pad` char(60) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`d` varchar(500) COLLATE utf8mb4_bin NOT NULL DEFAULT 'a',
PRIMARY KEY (`id`),
KEY `idx_d` (`d`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
ddl:
alter table sbtest1 add column daa varchar(2) not null default 'd' after k;
php info:
php-pdo-7.2.31-1.el7.remi.x86_64
php-7.2.31-1.el7.remi.x86_64
php prepare.php:
PHP Warning: PDOStatement::execute(): MySQL server has gone away in /data/dbadir/20200520/prepare.php on line 21
PHP Warning: PDOStatement::execute(): Error reading result set's header in
/data/dbadir/20200520/prepare.php on line 21
Array
(
)
php prepare.php:
PHP Warning: Packets out of order. Expected 1 received 13. Packet size=5 in
/data/dbadir/20200520/prepare.php on line 22
Array
(
)
connect proxysql:
PDO::ATTR_EMULATE_PREPARES => false ---> Error
PDO::ATTR_EMULATE_PREPARES => true ---> OK
SELECT * ---> SELECT id,pad,c ---->OK (ATTR_EMULATE_PREPARES=true/false)
connect MySQL:
PDO::ATTR_EMULATE_PREPARES => false ---> OK
PDO::ATTR_EMULATE_PREPARES => true ---> OK
SELECT * ---> SELECT id,pad,c ---->OK (ATTR_EMULATE_PREPARES=true/false)
Why when ATTR_EMULATE_PREPARES is false, does proxysql return an ERROR?