MySQL查询结束时的“ORDER BY order”导致问题

时间:2013-10-15 23:31:17

标签: php mysql

我有一个php脚本,它从数据库中提取内容并以某种方式打印它们。数据库有一个名为“order”的列标题,它是一个INT大小11.当我从中获取数据时,我试图通过数据库中的“order”值来排序内容,如下所示:

<?php

$db_hostname = '<hostname>';
$db_database = '<db>';
$db_username = '<username>';
$db_password = '<password>';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
mysql_select_db($db_database, $db_server);

$query = "SELECT * FROM <table> ORDER BY order"; // why is "ORDER BY order" problematic...
$table = mysql_query($query);

$data_items = '';
$carousel_items = '';
while($row = mysql_fetch_array($table)) {
// ...etc

数据库中有很少的行我从中获取信息,查询"SELECT * FROM <table>"的工作方式完全正常。我做错了什么?

如果有帮助,我会收到错误(在此脚本所针对的网站上): Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /$PATH/php/myfile.php on line 15

第15行是while($row = mysql_fetch_array($table)) {

我知道如果我不懒,我可以在没有MySQL查询的情况下对此进行排序,因为php非常灵活,可以执行$array[$row['order']] = $row['what I want'];之类的操作,但我想要的解决方案不是必须添加那些(应该是)不必要的行。我也尝试在我的查询结尾添加分号(只是为了确定),但它根本不会改变任何东西。 谢谢你的帮助!

3 个答案:

答案 0 :(得分:5)

order是一个保留字,用反引号包围它

$query = "SELECT * FROM <table> ORDER BY `order`";

答案 1 :(得分:0)

由于order是关键字,如果要将其用作标识符,则需要将其括在反引号中:

SELECT * FROM <table> ORDER BY `order`

答案 2 :(得分:0)

Order是mysql中的保留字。使用反引号来包围保留字,如下所示:

"ORDER BY `order`"

此处的文档:

http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html