2010-12-12 5 views
1

Sollte mysql_real_escape, um die Variablen zu entkommen, für alle Abfragen an die Datenbank verwendet werden?mysql_real_escape auf Abfragen

+2

Nope. mysql_real_escape_string ist nur für die durch Trennzeichen getrennten Strings anwendbar und für nichts anderes nutzbar –

+0

Wer beantwortet diese Fragen? – mario

+0

@mario - wahrscheinlich jemand auf der Suche nach einem Fragezeichen. –

Antwort

5

Ja, escape immer Variablen, die Sie in Abfragen übergeben.

Noch besser, verwenden PDO:

<?php 
/* Execute a prepared statement by binding PHP variables */ 
$calories = 150; 
$colour = 'red'; 
$sth = $dbh->prepare('SELECT name, colour, calories 
    FROM fruit 
    WHERE calories < :calories AND colour = :colour'); 
$sth->bindParam(':calories', $calories, PDO::PARAM_INT); 
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); 
$sth->execute(); 
?> 

Auf diese Weise brauchen Sie nicht mit Flucht zu tun (es sei denn, Sie Fragen haben, die besondere Sorgfalt erfordern). Wenn Sie darauf bestehen, die MySQL-Erweiterung zu verwenden, dann verwenden Sie mysql_real_escape_string().

+1

'SELECT * FROM Benutzer WHERE ID = $ ID;' Wie hilft hier die Flucht? –

+0

@ Col.Shrapnel Ich sprach über diese Art von Abfrage. –

1

Ja, Sie sollten alle Variablen aus Sicherheitsgründen entkommen. Flüchtige Zahlen usw. ändern nichts, so dass es auch kein Problem gibt, ihnen zu entkommen. Sie sollten alles entkommen, da Sie sonst versehentlich eine Variable verpassen könnten. Ich schlage vor, PHP mysql_real_escape_string()-function oder PDO prepared statements zu verwenden.

2

Sollten Sie immer Abfrageargumente sichern? Ja.
Sollten Sie immer mysql_real_escape_string dafür verwenden? Nr

Wenn du gehst nicht prepared statements zu verwenden, sollten Sie mysqli_real_escape mit (etwas dagegen die i für verbessert) Strings zu kodieren, die NUL (ASCII 0) enthalten, \n, \r, \, ', " und Kontrolle-Z. Zusätzliche Vorsichtsmaßnahmen können jedoch notwendig sein.

ist die aktiv entwickelte mysql-Erweiterung heutzutage. Die alte MySQL-Erweiterung hat nur vereinzelt Bugfixes, wird aber seit einiger Zeit nicht mehr aktiv weiterentwickelt.

Sehen Sie diese zwei Tutorials auf DevZone (aber beachten Sie auch, dass beide Artikel von Internet-Standards alten sind)

+0

Danke ich werde das benutzen. –