2010-01-13 93 views
0

现在我有这种形式后脚本如何阻止此查询的SQL注入?

<? 
    if(isset($_POST['baslik'])) { 
$sql = "INSERT INTO yazilar (baslik, spot, spot_kisa, spot_resim, spot_resim_isim, icerik, kategori, tiklanma, eklemetarihi) 
VALUES 
('$_POST[baslik]','$_POST[spot]','$_POST[spot_kisa]','$_POST[spot_resim]','$_POST[spot_resim_isim]','$_POST[icerik]','$_POST[kategori]','$_POST[tiklanma]','$_POST[tarih]')"; 
$sonuc = mysql_query($sql) or die(mysql_error()); 
    if ($sonuc) { 
    echo ("<p class='msg done'>Yeni icerik basarili bir sekilde eklendi.</p>"); 
    exit; 
    } 
    else { 
    $error = "<p class='msg warning'>Ekleme basarisiz oldu.</p>"; 
    } 
} 
     ?> 

我怎么可以忽略此查询SQL注入?

+0

dup:http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php – 2010-01-13 09:48:49

回答

1

使用参数化查询作为jammycack建议是要走的路,但如果由于某种原因无法使用它们,则可以使用mysql-real-escape-string函数来阻止大多数(全部?)危险值。问题在于你必须在每个收到的值上使用它,所以你不能使用你在示例中使用的速记概念。

8

使用参数化查询。不幸的是,PHP 4中的mysql扩展不支持这些功能,但如果您使用的是PHP 5,则可以使用mysqli扩展名或PDO来代替它们。

查看http://www.php.net/manual/en/mysqli.prepare.php了解如何完成的示例。

+0

+1用于参数化查询 – 2010-01-13 09:47:27