【问题标题】:PHP PDO: Syntax error or access violation (Help) [duplicate]PHP PDO:语法错误或访问冲突(帮助)[重复]
【发布时间】:2013-05-14 09:31:50
【问题描述】:

我遇到了 PDO 问题,找不到解决方案:

我的功能:

public static function create($position, $name, $mail, $mailtext, $confirmed, $key, $formid) {
    global $database;

    try {
        $pdo_result = $database->prepare('INSERT INTO Form (Position, Name, Mail, MailText, Confirmed, Key, Form_idForm) VALUES(:Position, :Name, :Mail, :MailText, :Confirmed, :Key, :Form_idForm)');
        $pdo_result->execute(array(
            ':Position' => $position,
            ':Name' => $name,
            ':Mail' => $mail,
            ':MailText' => $mailtext,
            ':Confirmed' => $confirmed,
            ':Key' => $key,
            ':Form_idForm' => $formid
        ));

        return $database->lastInsertId();
    } catch(PDOException $e) {
        Page::error('Error: Message:', $e->getMessage());
    }

    return null;
}

例外: SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'Key, Form_idForm) VALUES('Position', 'Name', 'Mail', 'MailText', '1', 'keeey', '' 附近使用的正确语法在第 1 行

【问题讨论】:

    标签: php database pdo prepare


    【解决方案1】:

    最终因为使用了Key,这是一个保留的 MySQL 单词。 改用另一个词或使用反引号`。

    作者:https://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

    【讨论】:

      【解决方案2】:

      key 是 SQL 中的关键字。因此,您不能将其用作列名。

      您应该重命名它,否则它会导致您当前遇到的问题。但是您可以像这样“转义”字段名称,这也将纠正这个问题:

      INSERT INTO Form (`Position`, `Name`, `Mail`, `MailText`, `Confirmed`, `Key`, `Form_idForm`) VALUES(:Position, :Name, :Mail, :MailText, :Confirmed, :Key, :Form_idForm)');
      

      您可以在此处找到保留字的完整列表:http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

      【讨论】:

        【解决方案3】:

        您在字段名称中使用了reserved words

        尝试在 $database->prepare-construct 中转义 INSERT-statement,如下所示:

        INSERT INTO Form (
            `Position`, `Name`, `Mail`, `MailText`, 
            `Confirmed`, `Key`, `Form_idForm`)  .... 
        

        【讨论】:

        • 谢谢! :-) 它现在可以工作了
        【解决方案4】:

        如果您愿意,您仍然可以使用密钥。用反引号把它包起来,

        INSERT INTO Form (
            `Position`, `Name`, `Mail`, `MailText`, 
            `Confirmed`, `Key`, `Form_idForm`)
        

        但作为建议,请不要使用任何保留关键字以避免将来出现问题。 :)

        MySQL Reserved Keywords List

        【讨论】:

          猜你喜欢
          • 2017-03-06
          • 1970-01-01
          • 2011-05-31
          • 2013-04-06
          • 1970-01-01
          • 2013-05-07
          • 2014-08-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多