我正在使用PHP和PDO准备语句来访问数据库。我有我要执行这个准备好的查询(通过一个foreach循环多次,但我没有看到,影响这真的):PDO准备的状态与手动查询的结果不一致
insert into forum_access (forum_id, user_id) select * from (select ?, ?)
as tmp where not exists (select * from forum_access
where forum_id = ? and user_id = ?) limit 1
然后我使用PDO与变量数组执行执行此语句,就像这样:
$values = Array(2, 1, 2, 1); // Normally it's variables here
$stmt->execute($values);
此执行,但奇怪的是,它会插入值的行(2,2)到forum_access。真正奇怪的是,当我运行变量的SQL查询手动插入,就像这样:
insert into forum_access (forum_id, user_id) select * from (select 2, 1)
as tmp where not exists (select * from forum_access
where forum_id = 2 and user_id = 1) limit 1
它正确地插入具有值的行(2,1)。
我希望这与PDO/MySQL对待准备语句的方式有关。我或多或少是准备好的陈述中的新手,不知道这里出了什么问题。希望别人能够对此有所了解。
说明: 我有理由使用相当复杂的插入...选择查询,而不是插入...重复键。也许并不完美的原因,但足以对建议不感兴趣,从根本上改变查询。
在WAMP服务器上使用PHP 5.3和MySQL 5.0。
你可以导出准备的语句本身吗? – 2014-12-27 16:37:48
你检查过参数的顺序吗?可能是错的。命名参数会更好 – kranthi117 2014-12-27 16:43:47