【问题标题】:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax [Php PDO]SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 [Php PDO]
【发布时间】:2017-07-26 18:40:57
【问题描述】:

我在许多网站上搜索过答案,但似乎没有人遇到过与我现在遇到的相同的问题,我遇到的那些问题。

问题是我收到此错误消息:

错误: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;

    ?>

我试过不使用(`),但消息是一样的。

【问题讨论】:

  • 数据库表中可能有错误?
  • 如果某个答案解决了您的问题,请考虑接受该答案。以下是meta.stackexchange.com/questions/5234/… 然后返回此处并对勾号/复选标记执行相同操作直到它变为绿色的方法。这通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,可能想要发布(更多)答案。您将获得积分,并鼓励其他人帮助您。 欢迎来到 Stack!
  • 嗨,我尝试实施更改但没有任何效果..所以它仍然打开:D
  • “没有任何效果”是什么意思?您是否仍然遇到同样的错误?
  • 是的,没错。

标签: php mysql pdo


【解决方案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)

【讨论】:

  • 感谢您的回复,但这并没有解决它.. :(
  • 我猜你在另一个查询中的代码中也有类似的错误。注释掉第一个查询后,看看您是否得到相同的错误。如果是这样,那就是不同的查询。
  • 杰森,好点子。我在插入查询中使用瑞典字母,我面临同样的问题。如果您对此有解决方案,请更新我们。
猜你喜欢
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 2019-08-08
相关资源
最近更新 更多