function Query()
{
$args = func_get_args();
if (sizeof ($args) > 0)
{
$query = $args[0];
for ($i = 1; $i < sizeof ($args); $i++)
$query = preg_replace ("/\?/", "'" . mysql_real_escape_string ($args[$i]) . "'", $query, 1);
}
else
{
return FALSE;
}
我有这样的功能。基本上,我做出这样的查询:mysql(i)_real_escape_string,安全依赖?
$this->Query('SELECT * FROM USERS WHERE Username = ? AND Points < ?', $username, $points);
它目前支持弃用mysql
功能,但适应mysqli
会在我的类mysqli
更换mysql
一样简单。
这是一个安全的方法来依靠对SQL注入攻击?每个问号都被mysql_real_escape_string
自动消毒,我从来没有遇到过问题,但是我应该使用mysqli_real_escape_string
进行消毒?
我知道的mysqli的预处理语句,但使用bindParam
每个变量似乎有点矫枉过正了我。
您认为如何?
*“似乎有点矫枉过正”?* *“矫枉过正”有一个简单,可靠,难以搞砸的机制来确保查询语法的有效性并防止SQL注入? – deceze 2013-03-13 15:55:43
*“,但对每个变量使用'bindParam'似乎对我有点矫枉过正”*什么?真的吗?这从来没有矫枉过正。 – 2013-03-13 15:55:48
不能依赖mysql_real_escape_string(可以在不依赖嵌入字符串的情况下执行“小型桌面表”);准备好的语句可能看起来过分了......直到数据库被入侵的地步 – 2013-03-13 15:55:54