Voor sommige zeldzame coderingen, zoals GBk - ja.
Maar u moet het niet om deze reden terugdraaien. Magische aanhalingstekens moeten sowieso worden uitgeschakeld (en zullen in de volgende PHP-versie zijn). Dus mysql_real_escape_string() is de enige escape-functie die nog over is. Merk op dat het geen sql-injectiepreventiefunctie is. Veel mensen begrijpen dit punt niet:het is slechts een deel van de syntaxis. Het moet niet worden gebruikt om iets te "beschermen", maar om syntactisch correcte SQL-query's samen te stellen. En moet elke keer dat u uw query maakt, worden gebruikt, ongeacht waar de gegevens vandaan komen. Natuurlijk zal het je ook beschermen tegen SQL-injecties, als bijwerking.
Natuurlijk, mysql_real_escape_string()
werkt alleen binnen strings tussen aanhalingstekens. Dus, als je dat doet
$num=mysql_real_escape_string($num);
$sql="SELECT INTO table SET data=$num"; /BAD!!!
Het beschermt niets. Als je getallen gaat gebruiken die niet aangehaald zijn, moet het naar het juiste type worden gegoten, zoals dit:
$num=intval($num);
$sql="SELECT INTO table SET data=$num"; /GOOD
- Houd er rekening mee dat mo make
mysql_real_escape_string()
werkt zoals bedoeld, de juiste clientcodering moet worden ingesteld en het is alleen . mogelijk metmysql_set_charset()
functie, zal de SET NAMES-query dat niet instellen.
Als je van al deze complexiteiten af wilt, kun je voorbereide verklaringen , hoewel u uw mysql-stuurprogramma moet overschakelen naar mysqli of PDO.
Houd er rekening mee dat geen juiste syntaxis of voorbereide instructies u niet zouden helpen met andere query-onderdelen dan letterlijke termen. U kunt niet ontsnappen aan Identifiers of operators. Als je deze delen toevallig dynamisch gebruikt, moeten ze hardcoded zijn in je script, zoals deze (voor de ORDER BY-clausule):
$orders=array("name","price","qty");
$key=array_search($_GET['sort'],$orders));
$orderby=$orders[$key];
$query="SELECT * FROM `table` ORDER BY $orderby";
of deze (WHERE-clausule)
$w=array();
if (!empty($_GET['rooms'])) $w[]="rooms='".mysql_real_escape_string($_GET['rooms'])."'";
if (!empty($_GET['space'])) $w[]="space='".mysql_real_escape_string($_GET['space'])."'";
if (!empty($_GET['max_price'])) $w[]="price < '".mysql_real_escape_string($_GET['max_price'])."'";
if (count($w)) $where="WHERE ".implode(' AND ',$w); else $where='';
$query="select * from table $where";