SQLSTATE[42000]:语法错误或访问冲突:1064 你的 SQL 语法有错误 [Php PDO]
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/42633343/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax [Php PDO]
提问by Dentalbudet
I have searched for an answer on numerous sites, however it seems like no one have had the same problem as I am having right now, the ones I have come across.
我已经在许多网站上搜索过答案,但是似乎没有人遇到过与我现在遇到的相同问题,即我遇到的问题。
The issue is that am getting this error message:
问题是我收到此错误消息:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '), NULL)' at line 2
错误:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在第 2 行附近的 '), NULL)' 附近使用的正确语法
The beginning of my code looks like this. I have been staring at it but I don't seem to find the problem, any help?
我的代码的开头是这样的。我一直盯着它,但我似乎没有发现问题,有什么帮助吗?
<?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;
?>
I have tried without the usage of (`), but the messsage is the same.
我试过不使用 (`),但消息是一样的。
回答by Jason
This error basically is telling you there's an error in your SQL syntax - the surrounding PHP isn't going to help you, so long as you're troubleshooting the correct query.
这个错误基本上是在告诉您 SQL 语法中存在错误 - 只要您对正确的查询进行故障排除,周围的 PHP 不会帮助您。
(reformatted for easier viewing)
(重新格式化以便于查看)
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)
Here's your clue: the right syntax to use near '), NULL)': You know you've got a close parentheses, comma, value, close parentheses.
这是你的线索:the right syntax to use near '), NULL)': 你知道你有一个右括号、逗号、值、右括号。
That points to your use of the time()function. You're using it like NOW()but that's not how it's intended to be used. You need an argument in there.
这表明您使用了该time()功能。您正在使用它,NOW()但这不是它的用途。你需要在那里争论。
I believe you just want to use NOW()instead, if it's a time-only field it'll automatically use only the time portion of the timestamp.
我相信你只是想NOW()改用,如果它是一个仅限时间的字段,它会自动只使用时间戳的时间部分。
VALUES
(:namn,
:enamn,
NOW(),
:personnr,
:kon,
:telefon,
:epost,
:allergier,
:kategori,
:brodtext,
NOW(), /* fixed! */
:eid)

