我在很多网站上搜索过一个答案,但似乎没有人遇到过我现在遇到的问题,我遇到过的问题。
问题是收到此错误消息:
错误: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;
?>
我试过没有使用(`),但是这个消息是一样的。
答案 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)