我试图找到您问题的合适副本,但我只找到了基于古老mysql_*
功能的真正骗子。mysql_*
PHP 社区不再维护这些函数(就像您正在使用的函数一样)(现在已经有一段时间了),并且弃用过程已经开始。看到红框了吗?
您真的应该尝试选择更好的PDO或MySQLi。这两个选项都应该没问题。恕我直言 PDO 有更好的 API,但mysqli
更倾向于 mysql(在大多数情况下,PDO 会做任何你想做的事情)。
有了这两个“新”API,还可以使用准备好的语句。使用准备好的语句,您不必担心在将值插入查询之前手动转义值。
使用 PDO API 的示例如下:
$db = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $db->prepare('SELECT COUNT(id) FROM articleList WHERE user = :user');
$stmt->execute(array('user' => $user));
如您所见,这些值并未直接插入到查询中,而是使用占位符。此代码将使人们无法将任意 SQL 注入到您的查询中。而且您不再需要进行任何转义。
如果您在决定 PDO 还是 mysql 时需要更多帮助,请查看文档以获取更多信息。如果您选择 PDO,您可以在此处找到有关该主题的优秀教程。