[英]PHP SQL update statement converting to (PDO)prepared statement
首先,我是Stackoverflow和PHP的新手,所以不要對我很難。
我在本周用sql查詢苦苦掙扎:
SET @i=0;UPDATE highscores SET ranking=@i:=(@i+1) ORDER BY highscore DESC;
我使用此sql查詢,因為我有一個名為“ highscores”的表和名為highscore和rank的列。 這段代碼可以幫助我自動組織排名系統(因此,最高的高分獲得排名1等(沒有相同的高分而沒有相同的排名)),但是由於我使用php並希望使用PDO的准備好的語句來確保它的安全性真的很困惑該怎么做。 我需要一些示例如何將此sql查詢轉換為安全的pdo准備好的語句,以使代碼嗅探器不會進入數據庫。 這是有效的代碼:
$stmt = $db->prepare("SET @i=0;UPDATE highscores SET ranking=@i:=(@i+1) ORDER BY highscore DESC;
$stmt->execute();
但如您所見,它並不安全。 我嘗試使用數組和bindparams,但我真的很困惑如何在安全的情況下使其真正發揮作用。 我希望你們能幫助我像3天那樣努力奮斗。
由於您沒有在查詢外部使用任何變量,因此此查詢是安全的。 我唯一要更改的就是刪除此結構,因為您可以通過一個不錯的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對其進行訂購,這樣您將獲得唯一的排名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.