2017-03-06 259 views
0

我在許多網站上搜索了一個答案,但它似乎沒有人遇到與我一樣的問題我現在有,我遇到過的。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

回答

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) 
+0

感謝您的迴應,但沒有解決它.. :( – Dentalbudet

+0

我猜你在另一個查詢中的代碼中有一個類似的錯誤較低。看看你是否在註釋掉第一個查詢後得到同樣的錯誤。所以,這是一個不同的查詢 – Jason

+0

賈森,好點,我在我的插入查詢中使用瑞典語字母,我面臨着同樣的問題,如果你有解決方案,請更新我們。 – ziaullahzia

相關問題