php - 结果同时为数字和多个参数 - ATTR_EMULATE_PREPARES

标签 php mysql pdo

我正在将 PDO 与 mySQL 结合使用。 ATTR_EMULATE_PREPARES 存在问题 - 我必须同时拥有 truefalse

如果 ATTR_EMULATE_PREPARES 设置为 true,PDO 将数字值作为字符串返回('column'=>'1' 而不是 'column'=>1)。

当我将 ATTR_EMULATE_PREPARES 设置为 false 时,我无法多次使用相同的参数(查询 ex: "select id, (select 1 from outtable o WHERE o.id=table.id and o.value=:value) FROM table WHERE (select 1 from outtable o WHERE o.id=table.id and o.value=:value)=1" - 参数 $params['value']=1

有解决办法吗?

最佳答案

没有直接的解决方案。

来自documentation :

You cannot use a named parameter marker of the same name more than once in a prepared statement, unless emulation mode is on.

您可以为每个参数出现添加唯一标记,并多次绑定(bind)参数值:

之前:

...:值,...:值,...:值

之后:

...:值,...:值02,...:值03

您可以将 preg_replace 与 lambda 函数结合使用来执行此操作。假设你有一个函数

function runSQL($query, $params) {

}

例如, $params = [ 'value' => [ 42, PDO::INT ] ]

您可以使用从 0 开始的增量计数器运行 preg_replace,如果计数器为 0,则不替换,否则将计数器(可能有前缀)附加到变量名称,然后添加,例如, [ ":{$key}_02", $params[$i][0], $params[$i][1] ]$params。之后,您在 foreach 循环中 bindParam $params

关于php - 结果同时为数字和多个参数 - ATTR_EMULATE_PREPARES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27101224/

相关文章:

php - 用laravel在mysql中插入多维数组json

php - 在 PHP 数组中计算年龄

php - 您的 SQL 语法有误;查看与您的 MySQL 服务器对应的手册

mysql - 是否有可能更快地获得查询?

php - PDO 使用外键插入到表中

php - 在 bool 值上调用成员函数 fetch()

php - 在 PHP 中,是否可以使用 PDO 获得一维数组?

PHP - 字符串替换语法错误 : illegal character

php - 如何在 PHP 中获取子数组?

php - 使用 PDO 和 MySQL 确认记录 INSERT