2016-12-15 127 views
0

首先im新到Stackoverflow和PHP,所以不要對我來說很難。PHP SQL更新語句轉換爲(PDO)準備語句

林本週掙扎的SQL查詢:

SET @i=0;UPDATE highscores SET [email protected]:=(@i+1) ORDER BY highscore DESC; 

我用這個SQL查詢,因爲我有一個叫做「高分」和列稱爲高分和排名表。這段代碼可以幫助我自動組織排名系統(所以最高的高分得到1等等(與高分相同的數量沒有相同的排名)),但由於即時通訊使用PHP,並希望它與PDO即時通訊真的很困惑如何做到這一點。我需要一些示例如何將此SQL查詢轉換爲安全的pdo準備語句,以便代碼嗅探器不會進入數據庫。這是可以工作的代碼:

$stmt = $db->prepare("SET @i=0;UPDATE highscores SET [email protected]:=(@i+1) ORDER BY highscore DESC;  
$stmt->execute(); 

但正如你看到它不安全。我嘗試使用數組和bindparams,但我真的很困惑如何在安全的情況下實際使它工作。我希望你們能幫助我,因爲我像3天一樣掙扎着。

回答

0

由於您沒有使用任何來自查詢外的變量,因此此查詢將是安全的。我唯一要改變的就是刪除這個結構,因爲你可以很容易地用一個很好的SELECT COUNT查詢來接收排名。

$query = $pdo->prepare('SELECT COUNT(id) AS count FROM highscores WHERE highscore < :highscore'); 
$query->execute(['highscore' => $highscore]); 
$row = $query->fetch(PDO::FETCH_ASSOC); 

$ranking = (intval($row['count']) + 1); 

這是一個簡單的例子,你可以用ID來訂購它,你沒有檢查後,這個項目之前會發生什麼,就這樣你會得到獨特的排名。