Heim >Datenbank >MySQL-Tutorial >Wie kann ich ORDER BY-Parameter sicher mit PDO-vorbereiteten Anweisungen verwenden?
PDO Prepared Statement: Festlegen von ORDER BY-Parametern
Beim Arbeiten mit vorbereiteten PDO-Anweisungen kann es zu Schwierigkeiten kommen, wenn Sie versuchen, Parameter in zu verwenden ORDER BY-Klausel. Obwohl die Anweisung ohne Fehler ausgeführt wird, gibt sie möglicherweise keine Ergebnisse zurück.
Um dieses Problem zu beheben, ist es notwendig, die ORDER BY-Argumente direkt in die SQL-Anweisung einzufügen, wie im folgenden Code gezeigt:
$order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
Es ist wichtig sicherzustellen, dass jeder Operator und jeder Bezeichner fest codiert und nicht dynamisch generiert wird. Dieser Ansatz hilft, Injektionsangriffe zu verhindern.
Eine weitere Möglichkeit, die Sicherheit Ihres Codes zu erhöhen, ist die Verwendung einer Whitelisting-Hilfsfunktion, wie die unten gezeigte:
function white_list($value, $allowed_values, $error_message) { if (!in_array($value, $allowed_values)) { throw new Exception($error_message); } else { return $value; } }
Durch den Einsatz dieser Funktion Sie können überprüfen, ob der eingegebene Wert in einer vordefinierten Liste gültiger Werte vorhanden ist, und einen Fehler auslösen, wenn dies nicht der Fall ist.
Mit diesem Ansatz ist Ihre vorbereitete Anweisung beides sicher und in der Lage, ORDER BY-Parameter korrekt zu verarbeiten:
$order = white_list($order, ["name", "price", "qty"], "Invalid field name"); $direction = white_list($direction, ["ASC", "DESC"], "Invalid ORDER BY direction"); $sql = "SELECT field from table WHERE column = ? ORDER BY $order $direction"; $stmt = $db->prepare($sql); $stmt->execute([$is_live]);
Das obige ist der detaillierte Inhalt vonWie kann ich ORDER BY-Parameter sicher mit PDO-vorbereiteten Anweisungen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!