2017-08-07 118 views
-3

我實現AF的評級系統,但將評級值插入數據庫不斷拋出連接錯誤:13PHP:錯誤插入數據庫

Parse error: syntax error, unexpected '$query' (T_VARIABLE) in http... on line 13`

線是$query = $bdd->prepare(...);

include('../db.class.php'); 
$bdd = new db(); 
if($_POST) { 
    $mediaId = $_POST['mediaId']; 
    $rate = $_POST['rate']; 

    $expire = 24*3600; // 1 day 
    setcookie('Rating'.$mediaId, 'rating', time() + $expire, '/'); // Place a cookie 

    error_reporting(E_ALL) 
    $query = $bdd->prepare("INSERT INTO my_db (rating) VALUES (?) WHERE id = '.$mediaId.'"); 
    $query->bindParam("i", $rate); 
    $query->execute(); 

    $result = $bdd->getOne('SELECT round(avg(rating), 2) AS average, count(rating) AS nbrRate FROM my_db WHERE id='.$mediaId.''); 

    $dataBack = array('avg' => $result['average'], 'nbrRate' => $result['nbrRate']); 
    $dataBack = json_encode($dataBack); 

    echo $dataBack; 

    $query->close(); 
    $bdd->close(); 
} 

的數據庫「my_db」具有列「id」(INT)和列「評級」(INT)。

我該如何解決這個錯誤?

+1

您似乎錯過了一個「;」在error_reporting(E_ALL) –

+0

不錯,你使用準備好的語句,但請使用它們,因爲你應該...'在哪裏id =?'然後綁定一個變量到WHERE。如果只准備好一半的語句,並且仍然讓用戶在其中輸入'$ mediaId',它將無濟於事,這真的很容易受到SQL注入的影響。 – Twinfriends

+0

你沒有一個名爲prepare()的函數,下面的'$ bdd-> prepare(...)'用來調用函數prepare從類 –

回答

0

嘗試用分號

error_reporting(E_ALL); 
$query = $bdd->prepare("INSERT INTO my_db (rating) VALUES (?) WHERE id = '.$mediaId.'"); 
+0

幫了一下。錯誤更改爲: '致命錯誤:未捕獲錯誤:調用未定義的方法db :: prepare()' – Meek

+0

編輯帖子並複製db.class.php – Deblugger

+0

現在做了那個...... – Meek

0

你有這樣的:

error_reporting(E_ALL) 
$query = $bdd->prepare("INSERT INTO my_db (rating) VALUES (?) WHERE id = '.$mediaId.'"); 

你需要檢查你的語法,你缺少;error_reporting(E_ALL)