0

我对 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 行

4

4 回答 4

5

您在字段名称中使用了保留字

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

INSERT INTO Form (
    `Position`, `Name`, `Mail`, `MailText`, 
    `Confirmed`, `Key`, `Form_idForm`)  .... 
于 2013-05-19T20:28:35.493 回答
3

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

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

于 2013-05-19T20:26:35.890 回答
2

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

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

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

MySQL 保留关键字列表

于 2013-05-19T20:30:31.887 回答
1

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

于 2013-05-19T20:28:33.523 回答