SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法错误[Php PDO]

时间:2017-03-06 18:52:45

标签: php mysql pdo

我在很多网站上搜索过一个答案,但似乎没有人遇到过我现在遇到的问题,我遇到过的问题。

问题是收到此错误消息:

  

错误:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以便在第2行使用')附近的正确语法,NULL)

我的代码的开头看起来像这样。我一直在盯着它,但我似乎没有找到问题,有什么帮助吗?

<?php
$dbhost="host";   <-- this is line 2.
$dbname="db";
$dbusername="user";
$dbpassword="pass";

ini_set("error_reporting", E_ALL);

if(isset($_POST) && !empty($_POST["namn"])) {

try {
$link = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbusername, $dbpassword);
$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $link->prepare("INSERT INTO `eventcustomers` (`namn`,`enamn`,`datum`,`personnr`,`kon`,`telefon`,`epost`,`allergier`,`kategori`,`brodtext`,`reseto`,`eid`)
    VALUES(:namn, :enamn, NOW(), :personnr, :kon, :telefon, :epost, :allergier, :kategori, :brodtext, time(), :eid)");

$stmt->bindParam(':namn', $_POST["namn"]);
$stmt->bindParam(':enamn', $_POST["enamn"]);
$stmt->bindParam(':personnr', $_POST["personnr"]);
$stmt->bindParam(':kon', $_POST["kon"]);
$stmt->bindParam(':telefon', $_POST["telefon"]);
$stmt->bindParam(':epost', $_POST["epost"]);
$stmt->bindParam(':allergier', $_POST["allergier"]);
$stmt->bindParam(':kategori', $_POST["kategori"]);
$stmt->bindParam(':brodtext', $_POST["brodtext"]);
$stmt->bindParam(':eid', $_POST["eid"]);
$stmt->execute();
    }
catch(PDOException $e)
    {
    echo "Error: " . $e->getMessage();
    }
}
$link = null;

    ?>

我试过没有使用(`),但是这个消息是一样的。

1 个答案:

答案 0 :(得分:1)

此错误基本上告诉您SQL语法中存在错误 - 只要您对正确的查询进行故障排除,周围的PHP就无法帮助您。

(重新格式化以便于查看)

INSERT INTO
    `eventcustomers`
    (`namn`,
    `enamn`,
    `datum`,
    `personnr`,
    `kon`,
    `telefon`,
    `epost`,
    `allergier`,
    `kategori`,
    `brodtext`,
    `reseto`,
    `eid`)
VALUES
    (:namn,
    :enamn,
    NOW(),
    :personnr,
    :kon,
    :telefon,
    :epost,
    :allergier,
    :kategori,
    :brodtext,
    time(), /* this is your problem */
    :eid)

这是你的线索:the right syntax to use near '), NULL)':你知道你有一个近括号,逗号,值,近括号。

这指向您使用time() function。你正在使用NOW(),但这不是它的用途。你需要一个参数。

我相信您只想使用NOW(),如果它只是一个时间字段,它将自动仅使用时间戳的时间部分。

VALUES
    (:namn,
    :enamn,
    NOW(),
    :personnr,
    :kon,
    :telefon,
    :epost,
    :allergier,
    :kategori,
    :brodtext,
    NOW(), /* fixed! */
    :eid)