Muss ich MySQL_REAL_ESCAPE_STRING verwenden, wenn ich Parameter binden?
-
21-09-2019 - |
Frage
Ich habe den folgenden Code:
function dbPublish($status)
{
global $dbcon, $dbtable;
if(isset($_GET['itemId']))
{
$sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';
$stmt = $dbcon->prepare($sqlQuery);
$stmt->bind_param('ii', $status, $_GET['itemId']);
$stmt->execute();
$stmt->close();
}
}
Muss ich in diesem Fall MySQL_REAL_ESCAPE_string oder in Ordnung?
Lösung
Nein, Sie müssen sich nicht selbst entkommen (dh nein, du musst nicht anrufen mysqli_real_escape_string
), wenn Sie vorbereitete Aussagen verwenden: Die DB -Motor wird dies selbst tun.
(Tatsächlich, wenn Sie angerufen haben mysql_real_escape_string
Und wenn Sie gebundene Parameter verwenden, würden Ihre Saiten zweimal entkommen - was nicht großartig wäre: Sie würden überall mit den Charakteren entkommen ...)
Als Nebenbetreuung: Ihre Werte werden als Ganzzahlen übergeben (wie durch die angegeben 'ii'
), Sie müssten also nicht anrufen mysql_real_escape_string
, Selbst wenn Sie keine vorbereiteten Aussagen verwendet haben: Wie der Name schon sagt, wird diese Funktion verwendet, um zu entkommen ... Zeichenfolgen.
Für Ganzzahlen benutze ich im Allgemeinen nur nur intval
Um sicherzustellen, dass die Daten, die ich in meine SQL -Abfragen injiziere, sind wirklich ganze Zahlen.
(Aber wenn Sie vorbereitete Abfragen verwenden, müssen Sie diese Art von selbst nicht selbst entkommen.)
Andere Tipps
Nein, du darfst nicht. Das Kombinieren der beiden würde zu sichtbaren Fluchtzeichen führen, die in Ihren Daten angezeigt werden.
function dbPublish($status)
{
global $dbcon, $dbtable;
if(isset($_GET['itemId']))
{
$sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';
$stmt = $dbcon->prepare($sqlQuery);
$stmt->bind_param('ii', $status, $_GET['itemId']);
$stmt->execute();
$stmt->close();
}
}