我正在尝试按用户定义的类别订购我的博文,即他们在我的博客页面上点击的那篇。
到目前为止,这是我的代码,
##########################################################
$cat = mysql_real_escape_string($_GET['category']);
##########################################################
$sql = "SELECT * FROM php_blog WHERE category = $cat ORDER BY timestamp";
$result = mysql_query($sql) or print ("Can't select entry from table php_blog.<br />" . $sql . "<br />" . mysql_error());
但这给了我这个错误,
无法从表中选择条目 php_blog。 SELECT * FROM php_blog WHERE category =更新ORDER BY时间戳 您的SQL语法有错误; 检查对应的手册 您的MySQL服务器版本 在'Update ORDER附近使用正确的语法 时间戳'在第1行警告: mysql_fetch_array():提供的参数 不是有效的MySQL结果资源 在 /home/funding9/public_html/jbblog/htdocs/category.php 在第91行
答案 0 :(得分:4)
$sql = "SELECT * FROM php_blog WHERE category = '" . mysql_real_escape_string($cat) . "' ORDER BY timestamp";
需要引用的字符串(在您的示例中为Update,需要为'Update'),并且还通过mysql_real_escape_string()运行它以保护您免受SQL注入。
答案 1 :(得分:1)
MySQL使用反向标记来允许您转义名称。您应该使用以下内容:
$cat = mysql_real_escape_string($_GET['category'], $mysql_link);
$queryString = "SELECT * FROM `php_blog` WHERE `category` = '$cat' ORDER BY `timestamp`";
提供链接将确保对该连接进行转义,其中不同的数据库可能具有不同的配置,并且需要在其中转义不同的内容。
您可能还想查看使用MySQLi的预准备语句。这样就难以了解哪些输入需要转义,应该如何引用,甚至一些验证。