2014-07-14 29 views
0

我想準備在PHP腳本插入查詢,並始終得到錯誤結果的INSERT語句:無法準備與子查詢

$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->錯誤號爲0和$ mysqli->錯誤也是空的。 當我用實際值替換查詢參數,並在phpMyAdmin中執行此查詢時,它工作得很好。

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

請幫助:

編輯#1 mysqli->準備()即使在查詢的簡化版失敗。

+0

您試圖插入什麼值? –

+0

'sssid':類似於'sdgsi2492lksjfsdf','type_x','item-name',100,5。但是問題發生在準備階段,而不是bind_params。 – user3447070

+0

有兩件事:一,如果將「FROM DUAL」添加到非表子查詢會發生什麼?這是沒有實際表格的查詢的佔位符表。二,如果你只是做了「SELECT?,?,?,?,?」會發生什麼?而不是「SELECT * FROM(SELECT?,?,?,?,?)」?這兩個是相同的。 – Andrew

回答

0

參考安德魯的評論,該問題已通過查詢更正解決。該查詢的工作版本爲:

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