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


What is wrong with this SQL Query? (MySQL Error)

我的查询在这里有什么问题?

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

我一直得到这个错误:

你的SQL语法有错误;查看手册对应于MySQL服务器版本,以便使用正确的语法'WHERE LinkedID = '6' ORDER by 'OrderSet' ASC' at line 1

您应该只有一个WHERE子句。AND算子足以分离两个条件。

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

还有一件事,您的查询将不能正确地ORDER行,因为您用单引号包装了列名OrderSet,从而将其转换为字符串。当您关心列名是否为保留关键字时,您可以用反勾号包装它或在表上提供别名,并使用带有该别名的列名来分隔列,但不能用单引号分隔

作为旁注,如果变量的值(s)来自外部,则查询容易受到SQL Injection的攻击。请看看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

    如何防止SQL注入在PHP?

你需要使用where once

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