这个SQL查询有什么问题?(MySQL错误)

use*_*810 1 php mysql sql

我的查询有什么问题?

mysql_query("SELECT * FROM admin_nav1 WHERE Active = 'YES' AND WHERE LinkedID = '$WID' ORDER by 'OrderSet' ASC") or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)

我一直收到这个错误:

您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在'WHERE LinkedID ='6'附近使用正确的语法在第1行'OrderSet'ASC'之后使用

Joh*_*Woo 5

你应该只有一个WHERE条款.AND运算符足以将这两个条件分开.

SELECT  * 
FROM    admin_nav1 
WHERE   Active = 'YES' AND LinkedID = '$WID'  // <<== one WHERE clause
ORDER   by OrderSet ASC
Run Code Online (Sandbox Code Playgroud)

还有一件事,您的查询将不会ORDER正确行,因为您已OrderSet使用单引号包装列名称,从而将其转换为字符串.如果您关注列名称(如果它们是保留关键字),则可以使用反引号将其换行或在表上提供别名,并使用带有该别名的列名来分隔列,但不能使用单引号.

作为一个旁注,查询是脆弱的SQL Injection,如果值(小号变量)从外面走了进来.请查看下面的文章,了解如何防止它.通过使用,PreparedStatements您可以摆脱使用值周围的单引号.