0

如何在 SQL 语句中为变量添加单引号?如果我用 'jeremy' 代替 '\$user'\ 变量,它会完美运行。我不知道如何转义 SQL 语句中变量的引号。谢谢您的帮助。

  $resultArticles = mysql_query("SELECT COUNT(id) FROM articleList WHERE user = '\$user'\ ");
  $totalArticlesLeaderboard = mysql_result($resultArticles, 0);
  echo "<strong>Total Articles: </strong>" . $totalArticlesLeaderboard;
4

4 回答 4

2

我试图找到您问题的合适副本,但我只找到了基于古老mysql_*功能的真正骗子。mysql_*PHP 社区不再维护这些函数(就像您正在使用的函数一样)(现在已经有一段时间了),并且弃用过程已经开始。看到红框了吗?

您真的应该尝试选择更好的PDOMySQLi。这两个选项都应该没问题。恕我直言 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,您可以在此处找到有关该主题的优秀教程。

于 2012-11-21T21:08:04.500 回答
1

测试这个

$resultArticles = sprintf("SELECT COUNT(id) FROM articleList WHERE user='%s", 
mysql_real_escape_string($user));
于 2012-11-21T20:56:43.500 回答
0

如果变量 $user 包含任何特殊字符,则需要对这些字符进行转义,如第一个答案所示。如果您没有可用的 mysql_real_escape_string() 函数,请使用 addlashes()。

于 2012-11-21T21:04:30.563 回答
0

您应该能够删除转义字符:

$user = mysql_real_escape_string($user);
$resultArticles = mysql_query("SELECT COUNT(id) FROM articleList WHERE user = '$user'");

如果您遇到变量问题,您可以随时结束字符串并连接。我经常这样做是为了避免混淆:

$user = mysql_real_escape_string($user);
$resultArticles = mysql_query("SELECT COUNT(id) FROM articleList WHERE user = '".$user."'");

正如 PeeHaa 所说,请确保您尝试使用PDOMySQLi

不要忘记转义所有用户输入,否则它们可能会破坏您的数据库。如果你使用 MySQLi,你可以使用mysqli::real_escape_string。清理所有用户数据是绝对必要的。不要跳过这个!

于 2012-11-21T20:53:45.707 回答