2012-12-22 18 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 

它表示声明中的四个字段。 这就是为什么你会得到一个“列数不匹配的值”