【发布时间】:2012-05-23 21:08:50
【问题描述】:
在一次转义多个字符串(来自 POST 或 GET 的字符串)时,这是一种好的做法吗?
还有什么我应该考虑或做不同的事情吗?我现在有 PDO,但在这段代码中我不想使用它。
class Bo extends Db
{
function clean($cThis)
{
$res = array();
foreach (array_keys($cThis) as $key) {
$res[$key] = mysql_real_escape_string(addslashes($cThis[$key]));
}
return $res;
}
function add($info)
{
$this->dbConnect();
$cInfo = $this->clean($info);
mysql_query("INSERT INTO table (b, c) VALUES ('".$cInfo['b']."', '".$cInfo['c']."')");
$this->dbDisconnect();
}
}
【问题讨论】:
-
请停止使用古老的
mysql_*函数编写新代码。它们不再维护,社区已经开始 deprecation process 。相反,您应该了解prepared statements 并使用PDO 或MySQLi。如果您无法决定,this article 将帮助您选择。如果你想学习,here is a good PDO-related tutorial。为@alnitak +1 回答。 -
您不想使用
addslashes()和mysql_real_escape_string()。删除addslashes()。另外,确保magic_quotes_gpc没有打开。 -
@vascowhite FWIW,我总是会选择 PDO 而不是 MySQLi,这样我就不会受限于使用 MySQL 作为后端。
-
@Alnitak 我同意,但我不想对此过于虔诚 :)
-
@MarcusAdams 感谢您的回答!好的,但是当查看删除 addlashes() 后已插入数据库的内容时,此字符串:'bobo' 输出为所述 ('bobo') 而不是 \'bobo\'。但这没关系,不要乱用 mysql_query 语句? (只是仔细检查)