准备声明 - 这里有什么问题

时间:2009-10-10 11:30:33

标签: mysql

DELIMITER $$

CREATE  PROCEDURE `Insert1`(IN NAME VARCHAR(100),IN valuees VARCHAR(100))   
BEGIN   
  SET @r = CONCAT('Insert into', NAME,'(name)','VALUES',valuees);   
  PREPARE smpt FROM @r;   
  EXECUTE smpt;   
  DEALLOCATE PREPARE smpt;   
END$$

DELIMITER ;

它正在成功编译...... 但是当我执行时给我带来了问题...

**CALL Insert1('rishi','duyuu')**

错误代码:1064 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“VALUESduyuu”附近使用正确的语法

2 个答案:

答案 0 :(得分:1)

在连接中添加空格:

CONCAT('Insert into ', NAME,'(name)',' VALUES ',valuees);

答案 1 :(得分:1)

有多个问题,首先看看哪个查询生成了CONCAT函数。您会注意到它不是有效的查询 - 'Insert intorishi(name)VALUESduyuu'。接下来,请参阅documentation on PREPARE/EXECUTE并使用占位符作为值。如果要生成原始查询字符串,则需要将字符串放入引号并进行转义。所以尝试这样的事情:

 SET @r = CONCAT('INSERT INTO ', NAME, ' (name) VALUES (?)');
 SET @v = valuees;
 PREPARE smpt FROM @r;
 EXECUTE smpt USING @v;

顺便说一下,不是在这里问一些小问题,也许你应该问一个更高层次的问题,解释你尝试过的东西,失败的东西等等。更容易帮助你处理高级问题,但是如果你是以错误的方式做某事并且问小技术问题如何修复它以便它以错误的方式工作,它对你没有多大帮助。