Was ist das Fragezeichen Bedeutung in MySQL bei "WHERE Spalte = ?"?
Ich bin sezieren code und stieß auf dieses,
$sql = 'SELECT page.*, author.name AS author, updator.name AS updator '
. 'FROM '.TABLE_PREFIX.'page AS page '
. 'LEFT JOIN '.TABLE_PREFIX.'user AS author ON author.id = page.created_by_id '
. 'LEFT JOIN '.TABLE_PREFIX.'user AS updator ON updator.id = page.updated_by_id '
. 'WHERE slug = ? AND parent_id = ? AND (status_id='.Page::STATUS_REVIEWED.' OR status_id='.Page::STATUS_PUBLISHED.' OR status_id='.Page::STATUS_HIDDEN.')';
Frage ich mich, was das "?" in der WHERE-Anweisung. Ist es eine Art von parameter-Halter?
InformationsquelleAutor Levi | 2009-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Prepared-Statements verwenden die '?' in MySQL zu erlauben, für die Bindung params auf die Erklärung. Hoch angesehen als sicherer gegen SQL-Injektionen, wenn Sie ordnungsgemäß verwendet. Dies ermöglicht auch eine schnellere SQL-Abfragen als die Anfrage muss nur einmal übersetzt werden und kann wiederverwendet werden.
Es gibt mehrere Möglichkeiten prepared statements, PDO und MySQLi unterstützen. us3.php.net/mysqli us3.php.net/manual/en/mysqli.prepare.php und eine schnelle google-Suche brachte mich zu den petefreitag.com/item/356.cfm
InformationsquelleAutor Jayrox
Dem Fragezeichen einen parameter darstellt, wird später ersetzt werden. Mit parametrisierten Abfragen ist sicherer als die Einbettung der Parameter direkt in der Abfrage.
SQL Server ruft das parametrisieren von Abfragen und Oracle nennt Sie bind-Variablen.
Die Auslastung variiert mit der Sprache, dass Sie die Ausführung der Abfrage aus.
Hier ist ein Beispiel wie es verwendet wird von PHP.
unter der Annahme, dass
$mysqli
ist eine Datenbank-Verbindung undpeople
ist eine Tabelle mit 4 Spalten.Den
'sssd'
ist ein flag, das die Ermittlung der restlichen Parameter, wos
stellt string-und died
dar stellen.InformationsquelleAutor Steve Stedman
?
hat keine Besondere Bedeutung in MySQLWHERE =
AussagenEr hat nur eine Besondere Bedeutung für mehrere externe Schnittstellen wie PHP stdlib und web-frameworks wie Rails.
?
ist nur ein syntax Fehler in:weil es ohne Anführungszeichen, und in:
gibt es:
damit scheinbar ohne Besondere Bedeutung.
Schienen Beispiel
In Rails-zum Beispiel das Fragezeichen wird ersetzt durch ein argument gegeben durch eine variable, von der Bibliothek Programmiersprache (Ruby), z.B.:
und es werden automatisch Anführungszeichen Argumente zu vermeiden, Fehler und SQL-injection, wodurch eine Aussage wie:
Das zitieren sparen würde, bei so etwas wie:
MySQL 5.0 prepared statements
MySQL 5.0 Hinzugefügt, die vorbereitete Anweisung Funktion die ähnliche Semantik, um die Fragezeichen in web-frameworks.
Beispiel aus den docs:
Ausgabe:
Diese auch spezielle escape-Zeichen wie erwartet:
Ausgabe:
InformationsquelleAutor Ciro Santilli 新疆改造中心996ICU六四事件
Diese sind prepared statements prepared statements bieten zwei wichtige Vorteile:
http://php.net/manual/en/pdo.prepared-statements.php
InformationsquelleAutor Raheel