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