0

我在 php 中有一个搜索表单,当用户输入要搜索的名称时,表单会调用以下 php 代码来给出结果。我的问题是,这段代码在执行时给了我“mysql_fetch_array() 期望参数 1 是资源,给定的布尔值”。如果我将 $sql 更改为类似的东西,$sql = " SELECT `name`, `surname`, `email`, `user_id` FROM users那么它可以正常工作。知道这可能是我的问题以及如何继续吗?

//more code

$start=0;
$per_page=10;
$page=1;

 $sql = " SELECT `name`, `surname`, `email`, `user_id` FROM users WHERE (surname LIKE '$name%' AND name LIKE '$surname%') OR (surname LIKE '$surname%' AND name LIKE '$name%') LIMIT 100 ";

 $sql .= "LIMIT $start, $per_page";

 $result = mysql_query($sql);

  while($run = mysql_fetch_array($result)){
      $surname = $run['surname'];
  }
4

3 回答 3

2

您正在生成无效查询;

$sql = "...LIKE '$name%') LIMIT 100 ";
$sql .= "LIMIT $start, $per_page";

...将生成 2 个LIMIT子句并导致语法错误。当您收到语法错误并且不检查 的返回值时mysql_query,您将在问题中收到错误消息,因为您没有得到返回结果。如果您检查了返回值使用;

$result = mysql_query($sql) or die(mysql_error());

...您会以错误消息的形式指出问题所在。

于 2013-07-08T13:23:41.883 回答
1

看起来您重复了两次LIMIT语句。LIMIT 100第一行以您要附加的下一行结尾,LIMIT $start, $per_page这将导致如下内容:

LIMIT 100 LIMIT 0,10

于 2013-07-08T13:23:49.677 回答
0

发生这种情况是因为您的查询失败。为什么不放一个 or die(mysql_error()); 捕捉错误?

做这样的事情

if($result === FALSE) {
    die(mysql_error()); // TODO: better error handling
}

while($run = mysql_fetch_array($result)){
    $surname = $run['surname'];
}

正如@Mike 指出的那样,你有一个语法错误,== > 2 times LIMIT

于 2013-07-08T13:25:47.003 回答