Php 无效参数编号错误

Php 无效参数编号错误,php,pdo,Php,Pdo,我有一个无效的参数错误,但我想我有正确的参数数量 这里有人看到相反的情况吗 我收到这个错误: PDOStatement::execute():SQLSTATE[HY093]:无效参数编号:绑定变量的数量与$readNews->execute()中的令牌数量不匹配 您有三个参数,但为索引1指定了一个值两次。试试这个 $readNews->bindValue(1, $search); $readNews->bindValue(2, $begin,PDO::PARAM_INT); $rea

我有一个无效的参数错误,但我想我有正确的参数数量

这里有人看到相反的情况吗

我收到这个错误:

PDOStatement::execute():SQLSTATE[HY093]:无效参数编号:绑定变量的数量与$readNews->execute()中的令牌数量不匹配


您有三个参数,但为索引
1
指定了一个值两次。试试这个

$readNews->bindValue(1, $search);
$readNews->bindValue(2, $begin,PDO::PARAM_INT);
$readNews->bindValue(3, $max,PDO::PARAM_INT);
$readNews->bindValue(1, "%$search%");
我猜您可能也想在
$search
值周围加上一些通配符。试试这个

$readNews->bindValue(1, $search);
$readNews->bindValue(2, $begin,PDO::PARAM_INT);
$readNews->bindValue(3, $max,PDO::PARAM_INT);
$readNews->bindValue(1, "%$search%");
。。。或者在查询中使用
CONCAT

WHERE title LIKE CONCAT('%', ?, '%')
您的查询还应该使用
WHERE
,而不是

SELECT * FROM news WHERE title LIKE ? ORDER BY date DESC LIMIT ?, ?"
我可能会通过使用命名占位符来删除一些重复项来简化这一过程。总的来说,这

if (isset($_POST['search'])) {
    $stmt = $pdo->prepare("SELECT * FROM news WHERE title LIKE CONCAT('%', :search, '%') ORDER BY date DESC LIMIT :begin, :max");
    $stmt->bindParam(':search', $_POST['search']);
} else {
    $stmt = $pdo->prepare('SELECT * FROM news  ORDER BY date DESC LIMIT :begin, :max');
}
$stmt->bindParam(':begin', $begin, PDO::PARAM_INT);
$stmt->bindParam(':max', $max, PDO::PARAM_INT);
$stmt->execute();

不要使用
使用逗号
从新闻中选择*,标题类似于
,但标题不是表格,标题是我想从新闻中选择*的列,标题类似于$search!您可能想使用Phil在下面发布的
WHERE
。我早些时候看到了这件事让我感到困惑。我知道我在某些事情上是对的。是的。在电脑前好几个小时都是这样(哈哈),但我对更新的声明也有同样的问题!顺便问一下,你认为这个方法是个好办法吗?因为它对我来说有点业余,因为代码重复。但是我在这里遇到了一个问题好几个小时了,现在我想到了这个解决方案,它是有效的,但是我也不知道它是否是一个正确的方法..谢谢你漂亮的解决方案,效果很好:)我只需要为这个$stmt=$pdo->prepare更新你的第二个select语句(“select*FROM news ORDER BY date DESC LIMIT:begin,:max”)@John23查询字符串周围的引号不应该有什么区别是的,你是对的,这是我做的不好的事情!