如何在SQL语句中向变量添加单引号?如果我用'jeremy'代替'\ $ user'\ variable它就能完美运行。我无法弄清楚如何在SQL语句中转义变量的引用。谢谢你的帮助。
$resultArticles = mysql_query("SELECT COUNT(id) FROM articleList WHERE user = '\$user'\ ");
$totalArticlesLeaderboard = mysql_result($resultArticles, 0);
echo "<strong>Total Articles: </strong>" . $totalArticlesLeaderboard;
答案 0 :(得分:2)
我试图找到一个合适的问题副本,但我只发现了基于古代mysql_*
函数的真实欺骗。 PHP社区(现在已经有一段时间)不再维护mysql_*
函数(就像您正在使用的函数一样)并且已经开始deprecation process。请参阅red box?
您应该尝试选择更好的PDO或MySQLi。这两个选项都应该没问题。 Imho PDO有一个更好的API,但mysqli
更倾向于mysql(在大多数情况下,PDO会做任何你想用它做的事情。)
使用两个“新”API,还有可能使用prepared statements。使用预处理语句,您不必担心在将值插入查询之前手动转义值。
使用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,请查看the docs以及有关它的更多信息。如果您选择PDO,您可以找到关于here主题的好教程。
答案 1 :(得分:1)
测试此
$resultArticles = sprintf("SELECT COUNT(id) FROM articleList WHERE user='%s",
mysql_real_escape_string($user));
答案 2 :(得分: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所说,请确保您尝试使用PDO或MySQLi。
不要忘记转义所有用户输入,否则它们可能会破坏您的数据库。如果您使用的是MySQLi,则可以使用mysqli::real_escape_string。清理所有用户数据绝对必要。不要跳过这个!
答案 3 :(得分:0)
如果变量$ user包含任何特殊字符,则必须转义这些字符,如第一个答案所示。如果您没有mysql_real_escape_string()函数,请使用addslashes()。