按类别排序结果
我想按用户定义的类别排列我的博客文章,即他们在我的博客页面上点击的博文。按类别排序结果
这里是我的代码迄今,
##########################################################
$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服务器版本使用附近的“更新ORDER 按时间戳”第1行警告的 正确的语法手册: mysql_fetch_array():提供的参数 不是 一个有效的MySQL结果资源 /home/funding9/public_html/jbblog/htdocs/category.php 上线91
$sql = "SELECT * FROM php_blog WHERE category = '" . mysql_real_escape_string($cat) . "' ORDER BY timestamp";
需要的字符串括起来(在你的例子是更新,需要将“更新”),并我也通过mysql_real_escape_string()来保护y来自SQL注入。
工作就像一个魅力,非常感谢! – AviateX14 2011-06-06 19:17:02
MySQL使用back ticks来允许您跳过名称。您应该使用类似以下内容:
$cat = mysql_real_escape_string($_GET['category'], $mysql_link);
$queryString = "SELECT * FROM `php_blog` WHERE `category` = '$cat' ORDER BY `timestamp`";
供应链接将确保它逃过这一方面,不同的数据库可以有不同的配置和要求他们进行转义不同的东西。
您也可以考虑使用MySQLi准备好的语句。这避免了知道哪些输入需要被转义,应该如何引用以及甚至是一些验证。
很好,你使用'mysql_real_escape_string',但你忘了围绕单引号的$猫,就像这样'WHERE category ='$ cat''。这意味着SQL注入漏洞仍然是开放的。所以不要忘记那些额外的引号。 – Johan 2011-06-06 19:21:12