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

问题描述:

我在许多网站上搜索了一个答案,但它似乎没有人遇到与我一样的问题我现在有,我遇到过的。SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法错误[Php PDO]

的问题是,我收到此错误信息:

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

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

<?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

也许错误是在数据库表中? – Mario

+0

如果答案解决了您的问题,请考虑接受答案。以下是http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work然后返回到此处,并使用勾号/复选标记执行相同操作,直至变为绿色。这告知社区,找到了解决方案。否则,其他人可能会认为这个问题仍然存在,并且可能需要发布(更多)答案。您将获得积分,其他人将被鼓励帮助您。 *欢迎来到Stack!* –

+0

嗨,我试图实施更改,但没有任何工作..所以它仍然开放:D – Dentalbudet

这个错误基本上告诉你在你的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) 
+0

感谢您的回应,但没有解决它.. :( – Dentalbudet

+0

我猜你在另一个查询中的代码中有一个类似的错误较低。看看你是否在注释掉第一个查询后得到同样的错误。所以,这是一个不同的查询 – Jason

+0

贾森,好点,我在我的插入查询中使用瑞典语字母,我面临着同样的问题,如果你有解决方案,请更新我们。 – ziaullahzia