Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP:While-Schleife funktioniert nicht, nachdem SELECT für die Verhinderung von SQL-Einschleusung angepasst wurde

Sie können keine Spalten- und Tabellennamen binden, sondern nur Daten. Sie müssen die Tabelle angeben und dann für Ihren '%calendar weekday%' binden .

$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);

Wenn Sie dynamische Tabellen-/Spaltennamen verwenden möchten, sollten Sie die minimale Whitelist dieser Elemente durchführen. Sie können eine dynamische Whitelist erstellen, indem Sie die Datenbank fragen, welche Spalten für eine bestimmte Datenbanktabelle gültig sind. Zum Beispiel:

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`

Sie könnten all diese Informationen in Arrays platzieren und dann überprüfen, ob sich die in der Abfrage verwendeten Tabellen-/Spaltennamen in den Arrays befinden. Achten Sie besonders auf Tabellen- und Spaltennamen und stellen Sie sicher, dass keine Schlüsselwörter / reservierten Wörter für diese Namen verwendet werden.

Verwenden Sie abschließend Backticks um die validierten Tabellen-/Spaltennamen, wenn Sie die Werte für die dynamischen Abfragen aufrufen. Dies deckt alle potenziellen Änderungen an der Liste der Schlüssel/reservierten Wörter ab und bietet eine zusätzliche Schutzebene.