2017-03-01 19 views
0

Helo。我在執行以下INSERT INTO查詢時遇到問題。 SELECT工作正常。錯誤在哪裏?如何插入數據庫(語法錯誤)

的PHP還給此錯誤消息:

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''id', 'reg_date', 'szoveg') VALUES (NULL, CURDATE(), 'x')' at line 1

$servername = "localhost"; 
$username = "root"; 
$password = "pass"; 
$dbname = "db"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt = $conn->prepare("SELECT * FROM Notes"); 
    $stmt->execute(); 

    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 

if(isset($_POST["szoveg"])){ 
     $query = "INSERT INTO Notes ('id', 'reg_date', 'szoveg') VALUES (NULL, CURDATE(), '".$_POST["szoveg"]."')"; 

     $stmt = $conn->prepare($query); 
     $stmt->execute(); 

} 

+1

**警告**:使用PDO時,您應該使用帶有佔位符值的[prepared statements](http://php.net/manual/en/pdo.prepared-statements.php),並將任何用戶數據作爲單獨的論點。在此代碼中,您可能會遇到嚴重的[SQL注入漏洞](http://bobby-tables.com/)。切勿使用字符串插值或連接,而應使用[準備語句](http://php.net/manual/en/pdo.prepared-statements.php),並且絕對不要將'$ _POST'或'$ _GET'數據直接放入您的查詢。有關此問題和其他問題的指導,請參閱[PHP正確方法](http://www.phptherightway.com/)。 – tadman

回答

-1

單引號(')表示SQL中的sting文字。指標識符,如列名,你應該使用裸字:

$query = "INSERT INTO Notes (id, reg_date, szoveg) VALUES (NULL, CURDATE(), '".$_POST["szoveg"]."')"; 

強制性評論:
使用字符串concatination生成SQL語句讓你的代碼容易受到SQL注入式攻擊。 您應該考慮改用prepareds statement

+1

與你的代表,你真的應該關閉Dups這樣的不回答他們 – RiggsFolly

+0

謝謝,效果很好! – sOnt

+0

此修復只是武器化了SQL注入漏洞。對準備好的陳述進行混淆是不夠的。 – tadman

-1

你的表列不應該被引用。

$query = "INSERT INTO Notes (id, reg_date, szoveg) VALUES (NULL, CURDATE(), '".$_POST["szoveg"]."')"; 
+0

謝謝,現在它按預期工作。 – sOnt