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

Php 无法使用子查询准备INSERT语句,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我试图用PHP脚本准备插入查询,但总是得到错误的结果: $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`=

我试图用PHP脚本准备插入查询,但总是得到错误的结果:

$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->error也为空。 当我用实际值替换查询参数并在phpMyAdmin中执行此查询时,它工作得很好

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

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

请提供帮助。

参考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`=?) 

您试图插入什么值?'sssid':类似于'sdgsi2492lksjfsdf','type_x','item name',100,5。但是问题发生在准备阶段,而不是bind_参数。两件事:第一,如果将DUAL添加到非表子查询,会发生什么?这是没有实际表的查询的占位符表。第二,如果只选择?,,,,,,会发生什么?而不是从选择?、?、?、?、?中选择*??“这两个是一样的。”安德鲁,谢谢你。我更正了查询,现在一切正常。你也不需要限制1。