2017-07-28 33 views
-1

更新表什麼是錯在這裏致命錯誤通過AJAX

JS

function cstatus(status, user, pass){ 
    var id = $('.pmarked').data('id'); 
    console.log(id); // 101 
    $.ajax({ 
     url: 'pro-status.php', 
     type: 'post', 
     data: {'status': status, 'user': user, 'pass': pass, 'id': id}, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 
} 

親status.php

$sql = "update posts set status = :astatus, user = :auser, pass = :apass, where id = :aid"; 

$stmt = $db->prepare($sql); 
$stmt->execute(array(
    ":astatus" => $_POST['status'], 
    ":auser" => $_POST['user'], 
    ":apass" => $_POST['pass'], 
    ":aid" => $_POST['id'] // line 12 
)); 

錯誤

致命錯誤...使用接近正確的語法 '其中id = '101'' ......親status.php:12

+3

**切勿將明文密碼!**請使用*** PHP的[內置函數(http://jayblanchard.net/proper_password_hashing_with_PHP。 html)***來處理密碼安全性。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。 ***在散列之前,不需要[escape passwords](http://stackoverflow.com/q/36628418/1011527)***或使用其他任何清理機制。這樣做會改變密碼並導致不必要的附加編碼。 –

+0

你能更好地解釋你想要做什麼嗎? – Samuel

+4

由於簡單的錯字而投票結束**作爲**題外話 - 在WHERE之前有一個尾隨逗號。 – Qirel

回答

6

後刪除這裏的逗號:

pass = :apass, where id = :aid" 

應該是:

pass = :apass where id = :aid" 

此外,你應該永遠存儲明文密碼!請使用PHP的built-in functions來處理密碼安全。如果您使用的PHP版本低於5.5,則可以使用password_hash()compatibility pack在散列之前,不需要escape passwords或使用其他任何清理機制。這樣做更改密碼並導致不必要的額外編碼。

3

應該

$sql = "update posts set status = :astatus, user = :auser, pass = :apass where id = :aid"; 

只需刪除comma (,):apass

+0

解決了,非常感謝 – bonaca

+0

@bonaca請在發佈之前仔細檢查代碼。這種打字錯誤是常見的,但不鼓勵 –

2

SQL語法問題請刪除逗號並在$ sql位置上使用。

$sql = "update posts set status = :astatus, user = :auser, pass = :apass where id = :aid"; 
2

刪除,where

$sql = "update posts set status = :astatus, user = :auser, pass = :apass where id = :aid";