使用PHP / MySQL,如何通过SQL子句下订单?
此语法不起作用:
$diplayquery = sprintf("
SELECT *
FROM user_urls
WHERE user_id='%s'
ORDER BY total_count",
mysql_real_escape_string($iduse) );
$diplayqueryout = mysql_query($diplayquery);
答案 0 :(得分:3)
在 SQL 中,order by
条款的写法如下:
SELECT * FROM TABLENAME WHERE condition ORDER BY FieldName [ ASC | DESC ] ;
示例:
SELECT * FROM students ORDER BY first_name ASC;
这将选择所有学生并按first_name(升序)订购。
因此,在您的情况下,您应该确保您的查询不返回一行,因为您正在user_id
上进行测试,这可能是唯一。要确保您的请求,请尝试在 PHPMyAdmin 上执行该请求,并查看它是否返回结果。
答案 1 :(得分:2)
您的SQL语法没有任何内在错误,但是,您的方法有一些方面可能会有所不足。
最重要的是,你的错误。由于您没有提到任何特定错误,因此我只能假设您尝试订购的列不存在于user_urls
表中。假设ID为“1”:
SELECT * FROM user_urls WHERE user_id=1 ORDER BY total_count
...只要total_count
列存在,就是有效的sql。查看文档here。
我在这里看到的第二个问题是你使用sprintf和经典的mysql_
PHP数据库函数。如果你想使用这样的值替换,而不必费心去调用每个值的转义函数,那么使用PDO会更好。查看该页面以获取信息和示例。如果你不打算使用PDO,你就没有理由进行精心设计的字符串连接(这样做绝对没有优势),相反,直接的方法同样有效,安全,而且肯定更清晰:
$diplayquery = '
SELECT
column1,
column2,
column3
FROM
user_urls
WHERE
user_id='.mysql_real_escape_string($iduse).'
ORDER BY
total_count
';
$diplayqueryout = mysql_query($diplayquery);
最后,我建议您不要使用SELECT *
方法。显式地命名从数据库中提取的列被认为是更好的做法,这样您的结果集就不是谁知道哪些字段的“神奇”集合。使用SELECT *
代替SELECT columnName1, columnName2, etc
,如上面的代码示例所示。