PHP中的MySQL按顺序排序错误

3
我正在为一个站点制作简单的CMS系统,以便非技术用户进行编辑。到目前为止一切顺利,但当我尝试运行这段代码时,一直出现错误:您的SQL语法有误;请查看与您的MySQL服务器版本对应的手册,以获取正确的语法使用方式,附近为“'pages' ORDER BY 'pages'.'pageOrder' ASC LIMIT 0 , 30”处存在问题。
从错误信息看来,似乎是“order by”部分出了问题,实际上,如果不使用该部分,它可以正常工作...
$sql = "SELECT * FROM 'pages' ORDER BY 'pages'.'pageOrder' ASC LIMIT 0 , 30";

$result = mysql_query($sql) or die(mysql_error());

现在我知道代码没有问题,因为最初我写了自己的SQL,但是失败后我从phpmyadmin中窃取了一些代码,但它仍然出错,但在phpmyadmin中可以正常运行...

我真的很苦恼,非常感谢你的帮助,谢谢...

2个回答

7

您不应该写'pages'。对于表名和列名,请使用反引号而不是单引号。单引号仅用于字符串。

而且这里根本不需要使用反引号。反引号通常只在SQL中作为保留字、包含特殊字符或空格的名称时才需要使用。因此,您可以这样做:

SELECT * FROM pages ORDER BY pageOrder LIMIT 30

其实我一开始并没有这样做,那个SQL语句只是我直接从phpmyadmin中复制出来的,但这并不能解决我的问题... - theflyinghaiwian
等等,我改正了,它确实解决了问题 - 我不明白为什么,但感谢您,先生 :) - theflyinghaiwian
@theflyinghaiwian - 因为单引号(')仅用于字符串,将'table'称为字符串是语法错误。 - Ben

3
您的查询中引号不正确。您可以使用以下两种方法之一:
$sql = "SELECT * FROM `pages` ORDER BY `pages`.`pageOrder`  ASC LIMIT 0 , 30";

如果您真的需要完全限定表/列名,或者只需省略并使用

$sql = "SELECT * FROM pages ORDER BY pageOrder ASC LIMIT 0 , 30";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接