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

Php 这个SQL查询有什么问题?(MySQL错误),php,mysql,sql,Php,Mysql,Sql,我的问题出了什么问题 mysql_query("SELECT * FROM admin_nav1 WHERE Active = 'YES' AND WHERE LinkedID = '$WID' ORDER by 'OrderSet' ASC") or die(mysql_error()); 我不断地发现这个错误: 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 第1行的“OrderSet”ASC”旁边的“WHERE LinkedID=“6”ORDER 您应

我的问题出了什么问题

mysql_query("SELECT * FROM admin_nav1 WHERE Active = 'YES' AND WHERE LinkedID = '$WID' ORDER by 'OrderSet' ASC") or die(mysql_error());
我不断地发现这个错误:

您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 第1行的“OrderSet”ASC”旁边的“WHERE LinkedID=“6”ORDER

您应该只有一个WHERE子句。运算符足以将这两种情况分开

SELECT  * 
FROM    admin_nav1 
WHERE   Active = 'YES' AND LinkedID = '$WID'  // <<== one WHERE clause
ORDER   by OrderSet ASC
还有一件事,您的查询将无法正确排序行,因为您已经用单引号将列名OrderSet包装起来,从而将其转换为字符串。当您关心列名是否为保留关键字时,您可以使用反勾号将其换行,或者在表上提供别名,并使用带有该别名的列名来分隔列,但不能使用单引号

作为旁注,如果变量的值来自外部,则查询易受攻击。请看下面的文章,了解如何预防它。通过使用PreparedStatements,可以避免在值周围使用单引号

您应该只有一个WHERE子句。运算符足以将这两种情况分开

SELECT  * 
FROM    admin_nav1 
WHERE   Active = 'YES' AND LinkedID = '$WID'  // <<== one WHERE clause
ORDER   by OrderSet ASC
还有一件事,您的查询将无法正确排序行,因为您已经用单引号将列名OrderSet包装起来,从而将其转换为字符串。当您关心列名是否为保留关键字时,您可以使用反勾号将其换行,或者在表上提供别名,并使用带有该别名的列名来分隔列,但不能使用单引号

作为旁注,如果变量的值来自外部,则查询易受攻击。请看下面的文章,了解如何预防它。通过使用PreparedStatements,可以避免在值周围使用单引号


你需要用where一次

SELECT * FROM admin_nav1 
WHERE Active = 'YES' AND  .....

然后对更多条件使用and运算符。

您需要使用where一次

SELECT  * 
FROM    admin_nav1 
WHERE   Active = 'YES' AND LinkedID = '$WID'  // <<== one WHERE clause
ORDER   by OrderSet ASC
SELECT * FROM admin_nav1 
WHERE Active = 'YES' AND  .....
然后使用and运算符获得更多条件

SELECT  * 
FROM    admin_nav1 
WHERE   Active = 'YES' AND LinkedID = '$WID'  // <<== one WHERE clause
ORDER   by OrderSet ASC