0

我正在制作具有此查询的搜索框功能:

$query="SELECT * FROM article WHERE title LIKE ? OR description LIKE ?";

然后在 foreach 循环中,我创建了这个数组:

$params[]= "%".$keyword."%";
$params[]= "%".$keyword."%";

然后我执行:

$stmt=$cxn->prepare($query);
$stmt->execute($params);

这可行,但是...

如果在 foreach 循环之后,我想添加“LIMIT ?,?”,我这样做:

$query.=" LIMIT ?, ?";
$params[]=$row_number;
$params[]=$items_per_page;

然后我执行脚本,它会抛出这个致命错误:

PHP Fatal error:  Uncaught exception 'PDOException' with message 
'SQLSTATE[42000]: Syntax error or access violation: 1064 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 ''0', '2'' at line 1' in ..../index.php:247
  Stack trace:
  #0 .../index.php(247): PDOStatement->execute(Array)
 #1 {main}
 thrown in ..../index.php on line 247

我尝试在关键字周围添加撇号:$params= "'%".$keyword."%'"; 但这不起作用。

此外,我在 PHPMyAdmin 中尝试了完全相同的查询,并且成功了。

有谁知道为什么这会引发错误?

提前非常感谢。

4

3 回答 3

3

更新:

$query="SELECT * FROM article WHERE title LIKE ? OR description LIKE ?";
$query.=" LIMIT ?, ?";
$stmt=$cxn->prepare($query);
$stmt->bindValue(1, "%".$keyword."%");
$stmt->bindValue(2, "%".$keyword."%");
$stmt->bindValue(3, $row_number, PDO::PARAM_INT);
$stmt->bindValue(4, $items_per_page, PDO::PARAM_INT);

$stmt->execute();
于 2012-09-04T02:00:42.870 回答
1

LIKE 不起作用的原因是,当您将绑定参数与 LIKE 一起使用时,它会将 '%value%' 视为字符串。

你将不得不使用:

$query="SELECT * FROM article WHERE title LIKE CONCAT('%',?,'%') OR description LIKE CONCAT('%',?,'%')";
于 2012-09-04T02:04:13.323 回答
0

我认为您需要转换您在限制子句中传递的变量。看到这个子句...to use near ''0', '2''中的值有单引号LIMIT

尝试

$query.=" LIMIT ?, ?";
$params[] = intval($row_number);
$params[] = intval($items_per_page);
于 2012-09-04T02:08:21.537 回答