Heim >Datenbank >MySQL-Tutorial >Machen vorbereitete Anweisungen die Notwendigkeit von „mysql_real_escape_string()' in PHP überflüssig?

Machen vorbereitete Anweisungen die Notwendigkeit von „mysql_real_escape_string()' in PHP überflüssig?

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 11:34:01603Durchsuche

Do Prepared Statements Eliminate the Need for `mysql_real_escape_string()` in PHP?

Vorbereitete Anweisungen und Escaping: Ein Balanceakt

Muss man bei der Verwendung vorbereiteter Anweisungen in PHP immer noch mysql_real_escape_string() verwenden, um dies zu verhindern? SQL-Injections? Lassen Sie uns eine bestimmte Abfrage und ihre Implementierung untersuchen, um diese Frage zu beantworten.

Abfrage und Implementierung

<code class="php">$consulta = $_REQUEST["term"] . "%";

$sql = $db->prepare('select location from location_job where location like ?');

$sql->bind_param('s', $consulta);
$sql->execute();
$sql->bind_result($location);

$data = array();

while ($sql->fetch()) {
    $data[] = array('label' => $location);
}
?>

**The Dilemma**

The provided query aims to fetch locations that match the term entered in the $_REQUEST["term"] variable. While the usage of a prepared statement is commendable for preventing SQL injections, the implementation raises a query: is mysql_real_escape_string() still necessary in this case?

**The Verdict: No, but a Refinement is Suggested**

When using prepared statements, as long as they are employed correctly, they effectively shield against SQL injections. In this instance, mysql_real_escape_string() is redundant. However, a minor improvement can enhance the code's clarity and efficiency.

Rather than using bind_param('s', $consulta), it's more straightforward to pass parameters through the execute method, especially when utilizing the '?' placeholder. The updated code would be:
</code>

$sql->execute([$consulta]);

Warum es Matters

Vorbereitete Anweisungen mit Parameterbindung stellen sicher, dass externe Daten die SQL-Abfrage nicht manipulieren können. Bedenken Sie jedoch, dass die SQL-Parameterbindung allein keine sichere Anzeige in HTML gewährleistet. Dafür ist es wichtig, Funktionen wie htmlspecialchars() zu verwenden, bevor die Abfrageergebnisse ausgegeben werden.

Das obige ist der detaillierte Inhalt vonMachen vorbereitete Anweisungen die Notwendigkeit von „mysql_real_escape_string()' in PHP überflüssig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn