按类别订购结果

时间:2011-06-06 19:13:59

标签: php mysql

我正在尝试按用户定义的类别订购我的博文,即他们在我的博客页面上点击的那篇。

到目前为止,这是我的代码,

##########################################################
$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行

2 个答案:

答案 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的预准备语句。这样就难以了解哪些输入需要转义,应该如何引用,甚至一些验证。