Wenn man seine MySQL-Querys sicher gegen SQL-Injection schützten möchte, sollte man alle Variablen, die Usereingaben beinhalten, vorher mit mysql_(real_)escape_string() unschädlich machen. Um das ganze auch noch etwas komfortabler zu machen, kann man das ganze auch noch in eine kleine Funktion packen.
function mysql_query_s($query, $args = array(), $mysql_resource = null)
{
$escape_func = (function_exists('mysql_real_escape_string') ?
'mysql_real_escape_string' : 'mysql_escape_string';
foreach ($args as $key => $value)
{
$query = str_replace('%'.$key.'%', $escape_func($value), $query);
}
if ($mysql_resource !== null)
{
return mysql_query($query, $mysql_resource);
}
else
{
return mysql_query($query);
}
}
Jetzt kann man seine Querys ganz bequem und sicher schreiben. Alle potentiell gefährliche Variablen übergibt man einfach im zweiten Argument als Array.
$result = mysql_query_s('SELECT foo, bar FROM baz WHERE id = "%id%"',
array('id' => $_POST['id']));
Edit: Auf Wunsch, hab ich hier nochmal eine etwas angepasste Version der Funktion:
function mysql_query_s($query, $args = array(), $mysql_resource = null)
{
$escape_func = (function_exists('mysql_real_escape_string') ?
'mysql_real_escape_string' : 'mysql_escape_string';
for ($i = 1; $i <= count($args); $i++)
{
$query = str_replace('%'.$i, $escape_func($value), $query);
}
if ($mysql_resource !== null)
{
return mysql_query($query, $mysql_resource);
}
else
{
return mysql_query($query);
}
}
Dann kann man das ganze etwas bequemer aufrufen.
$result = mysql_query_s('SELECT foo, bar FROM baz WHERE id = "%1" AND blub = "%2"',
array($_POST['id'], $_GET['blub']));
[ »
HesaSys - ein freies, schnelles und flexibles WCMS ]