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>";
}
答案 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语法有错误;查看手册......
使错误发生在哪里更明显。