无法使用子查询准备INSERT语句

时间:2014-07-14 12:30:11

标签: php mysqli prepared-statement

我正在尝试在PHP脚本中准备INSERT查询并始终获得FALSE结果:

$mysqli -> prepare(
'INSERT INTO `shopping_cart_data`(`cart_id`, `type`, `item`, `size`, `cost`) '
. 'SELECT * FROM (SELECT ?,?,?,?,?) AS tmp '
. 'WHERE NOT EXISTS (SELECT `id` FROM `shopping_cart_data` WHERE `cart_id`=? AND `item`=?) '
. 'LIMIT 1'
);

$ mysqli-> errno为0,$ mysqli->错误也为空。 当我用实际值替换查询参数并在phpMyAdmin中执行此查询时,它工作得很好。

编辑#1 即使在查询的简化版本上,mysqli-> prepare()也会失败:

INSERT INTO `shopping_cart_data`(`cart_id`, `type`, `item`, `size`, `cost`) SELECT * FROM (SELECT ?,?,?,?,?) AS tmp LIMIT 1

请帮忙。

1 个答案:

答案 0 :(得分:0)

参考Andrew的评论,问题通过查询更正得以解决。查询的工作版本是:

INSERT INTO `shopping_cart_data`(`cart_id`, `type`, `item`, `size`, `cost`)
SELECT ?,?,?,?,? FROM DUAL 
WHERE NOT EXISTS (SELECT `id` FROM `shopping_cart_data` WHERE `cart_id`=? AND `item`=?)