【问题标题】:Mysql Prepare Statement error while executingMysql Prepare Statement 执行时出错
【发布时间】:2010-10-30 02:05:07
【问题描述】:

我正在尝试通过 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,

【问题讨论】:

  • 你能告诉我们你得到的实际错误吗?

标签: mysql prepared-statement concat


【解决方案1】:

你没有在 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) )');

【讨论】:

  • 您插入 \n 是否有任何特殊原因?
  • 我只是怀疑在这种情况下它是按字面意思解释的
  • 在mysql客户端很容易确认:select concat('abc', '\n', 'xyz');不,\n 被翻译成换行符。
【解决方案2】:

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

[可准备语句的]文本必须表示单个 SQL 语句,而不是多个语句。

所以你必须先执行DROP TABLE 语句,然后分别准备和执行CREATE TABLE 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-04
    • 2012-02-24
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2011-06-02
    • 2019-12-28
    相关资源
    最近更新 更多