2012-12-22 19 views
4

我有一個存儲過程是這樣的:在mysql中使用prepared-statement插入查詢?

SET @query = CONCAT('insert into tblcommodity (id , idname , count)values (',p1, p2,p3,')'); 
PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

但是當我要運行它,它有這個錯誤:

> Procedure execution failed 1136 - Column count doesn't match value 
> count at row 1 

和另一件事是,當我只需運行插入代碼,它跑!

plz幫助我。

+0

你準備一個聲明來釋放它剛纔?並注意:如果任何參數爲NULL,CONCAT()將返回NULL。 – NeeL

+0

實際上我有很長時間沒有執行這個部分,所以我在另一個sp中分開了這部分的測試,但它並沒有運行。 – Highlan

回答

10

恕我直言,你這樣做kindof違背了準備語句的整個目的的方式。我會改用此表單:

SET @query = 'INSERT INTO tblcommodity (id, idname, count) VALUES (?, ?, ?)'; 
PREPARE stmt FROM @query; 
EXECUTE stmt USING @p1, @p2, @p3; 
3

應該

SET @query = CONCAT('insert into tblcommodity (id , idname , count)values (',',',p1,',', p2,',',p3,')'); 
1

試試這個:

SET @query = CONCAT("insert into tblcommodity (id , idname , count) values (", p1, ", '", p2,"',",p3,")"); 
PREPARE stmt FROM @query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
0

順便說一句,你的代碼:

SET @query = CONCAT('insert into tblcommodity (id , idname , count)values (',p1, p2,p3,')'); 

有一個逗號開始:

,p1,p2,p3 

它表示聲明中的四個字段。 這就是爲什麼你會得到一個「列數不匹配的值」