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

时间:2014-11-24 09:10:00

标签: php mysql pdo

我在mySQL中使用PDO。 对ATTR_EMULATE_PREPARES有疑问 - 我必须同时拥有truefalse

如果ATTR_EMULATE_PREPARES设置为true PDO将数字值作为字符串返回('列' =>' 1'而不是'列& #39; = GT; 1)

当我将ATTR_EMULATE_PREPARES设置为false时,我无法多次使用相同的参数(我在查询前后出错:"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 < / p>

有解决方法吗?

1 个答案:

答案 0 :(得分:0)

没有直接的解决方案。

来自documentation

  

您不能在预准备语句中多次使用同名的命名参数标记,除非启用模拟模式

您可以为每个参数事件添加唯一标记,并多次绑定参数值:

在:

...:value,...:value,...:value

后:

...:value,...:value02,...:value03

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

function runSQL($query, $params) {

}

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

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