2013-03-09 61 views
1

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

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

我不断收到此错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE LinkedID = '6' ORDER by 'OrderSet' ASC' at line 1

回答

5

您应该只有一个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你可以摆脱使用单引号围绕值。

0

你需要使用,即一旦

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

,然后使用和运营商更多的条件。