具有整数类型的PDO查询

时间:2017-07-20 21:53:45

标签: php mysql pdo

从PHP,我使用PDO查询MySQL数据库。查询是

$id = 5;
$stmt = $con >prepare("select name from employee where id= ? "); 
$stmt ->bindValue(1, $id, PDO::PARAM_INT);

这是按预期工作的,并且获取了ID为5的员工的姓名。但是从日志中我可以看到实际执行的查询是

select name from employee where id= '5'

id是int类型,绑定是使用PDO :: PARAM_INT完成的。所以执行的查询应该是id= 5而不是id= '5'。由于这个原因,MySql可能会将字符串转换为int,

这是PDO的预期行为还是我理解错误?

2 个答案:

答案 0 :(得分:2)

http://php.net/manual/en/pdostatement.bindvalue.php中的用户提供的说明指定了以下内容:

  

“Emulated准备工作在这种情况下更稳定,因为它们将所有内容转换为字符串,只是决定引用参数或引用参数。”

参考:http://php.net/manual/en/pdostatement.bindvalue.php#119956

答案 1 :(得分:1)

这可能是PHP中的一个错误,this ticket或与this one相关。已提交commit修复此错误(2016年10月11日星期二),其中说:

  

预准备语句模拟器(pdo_sql_parser。)计算出如何引用   每个查询参数。目标类型由PDO :: PARAM _ 指定   有争议,但这个方向并不总是遵循

你的PHP版本是什么?更新可能会解决它。