mysql子句有什么问题

时间:2012-03-26 21:20:03

标签: php mysql

TABLE bcompany

companyID | cName | ...

我有输入字段,用户搜索包含“输入”字符的记录:

<input type="text" class="bigblack" name="srch" />

PHP:

$req="%".mysql_real_escape_string($_POST['srch'])."%";

$query = mysql_query("SELECT companyID, cName FROM bcompany WHERE
companyID OR cName LIKE $req ORDER BY companyID LIMIT 10");

OR

$query = mysql_query("SELECT companyID, cName FROM bcompany WHERE
companyID,cName LIKE $req ORDER BY companyID LIMIT 10");

两个查询都返回错误:

  

mysql_fetch_array()期望参数1是资源....

MYSQL SELECT可能有问题。

你能帮我解决一下吗?

提前致谢:)

其余代码:

while($res = mysql_fetch_array($query)) {


    echo $res["companyID"];
    echo $res["cName"]."<br>";



}

3 个答案:

答案 0 :(得分:3)

您的查询应该是:

$query = mysql_query("SELECT companyID, cName FROM bcompany WHERE
companyID LIKE '$req' OR cName LIKE '$req' ORDER BY companyID LIMIT 10");

以下是MySQL LIKE的文档:

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

或者,您可以在查询中使用MySQL REGEXP代替LIKE。

当你调用它时,看起来mysql_fetch_array正在抓紧,因为查询不正确并且没有产生mysql_fetch_array可以使用的结果。

答案 1 :(得分:2)

您需要用引号括起字符串:

mysql_query("SELECT companyID, cName FROM bcompany WHERE companyID,cName LIKE '$req' ORDER BY companyID LIMIT 10");

应该工作。

啊,错过了这个:

mysql_query("SELECT companyID, cName FROM bcompany WHERE companyID LIKE '$req' OR cName LIKE '$req' ORDER BY companyID LIMIT 10");

您可能想要将OR更改为AND。

答案 2 :(得分:2)

来自the docs

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回FALSE。

因此,您遇到的问题是$query是假的,但在您的(未示出的)代码中,您没有检查它。

原因是你的查询或查询无效,取了第一个:

SELECT
    companyID, cName 
FROM 
    bcompany
WHERE
    companyID OR cName LIKE $req
ORDER BY
    companyID
LIMIT 10

这不是有效的查询,您需要:

SELECT
    companyID, cName 
FROM 
    bcompany
WHERE
    companyID LIKE "$req" OR cName LIKE "$req"
ORDER BY
    companyID
LIMIT 10

您可以通过直接针对db(打开终端窗口和mysql -uname -ppass db等)而不是通过php运行查询来帮助识别这样的问题。对问题中的任何一个查询执行此操作都会吐出:

  

错误1064(42000):您的SQL语法有错误;查看手册......

使错误发生在哪里更明显。