一个很好的方法是实现一个 Wrapper 类以使用 mysql_* 函数,并使用一些方法来创建准备好的语句。
这个想法是您必须在查询中传递强类型参数。
例如,这是一段具有一般思想的代码。当然,它需要更多的工作。但如果实施得当,这可以防止 SQL 注入攻击。
您还可以搜索已经实现该功能的 3rd 方库,因为这很常见。
<?php
class MyDb
{
protected $query;
public function setQuery($query)
{
$this->query = $query;
}
public function setNumericParameter($name, $value)
{
if (is_numeric($value)) // SQL Injection check, is the value really an Int ?
{
$this->query = str_replace(':'.$name, $value);
}
// else, probably an intent of SQL Injection
}
// Implement here the methods for all the types you need, including dates, strings, etc
public function fetchArray()
{
$res = mysql_query($this->query);
return mysql_fetch_array($res);
}
}
MyDb $db = new MyDb();
$db->setQuery('SELECT * FROM articles WHERE id = :id');
$db->setNumericParameter('id', 15);
while ($row = $db->fetchArray())
{
// do your homework
}