执行时Mysql准备语句错误

时间:2009-05-30 08:58:01

标签: mysql prepared-statement concat

我试图通过prepare语句创建一个表,但它给了我语法错误。好吧,如果我尝试单独执行相同的语句,那么它可以正常工作。

这是我的陈述 -

SET @Stmt1 = Concat('DROP TABLE IF EXISTS ',DB,'.`county`;\n'
'CREATE TABLE IF NOT EXISTS ',DB,'.`County`
(
  `CountyID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `CountyName` VARCHAR(45) NOT NULL,
  `CountyCode` VARCHAR(30) NOT NULL,
   PRIMARY KEY (`CountyID`)
)');

Prepare stmt2 From @stmt1;
Execute stmt2;

请允许任何人告诉我本声明中缺少什么? 它在这一行上给我一个错误:

'CREATE TABLE IF NOT EXISTS ',DB,'.`County`
(
  `CountyID` INT UNSIGNED NOT NULL AUTO_INCREMENT,

2 个答案:

答案 0 :(得分:3)

http://dev.mysql.com/doc/refman/5.1/en/prepare.html说:

  

[可伪造语句]的文本必须代表单个SQL语句,而不是多个语句。

因此,您必须先执行DROP TABLE语句,然后单独准备并执行CREATE TABLE语句。

答案 1 :(得分:0)

你是不是错过了concat中两个字符串之间的逗号?

应该是

SET @Stmt1 = Concat('DROP TABLE IF EXISTS ',DB,'.county;\n', 'CREATE TABLE IF NOT EXISTS ',DB,'.County ( CountyID INT UNSIGNED NOT NULL AUTO_INCREMENT, CountyName VARCHAR(45) NOT NULL, CountyCode VARCHAR(30) NOT NULL, PRIMARY KEY (CountyID) )');