簡體   English   中英

PHP SQL更新語句轉換為(PDO)准備的語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM