这是我以前使用的代码:
$stmt = $pdo->prepare('SELECT name, age, something FROM MyTable WHERE MATCH (name, age) AGAINST (:value IN BOOLEAN MODE)');
$stmt->bindParam(':value', $value, PDO::PARAM_STR);
$stmt->execute();
$results = $stmt->fetchAll();
foreach( $results as $row ) {
它运作良好。但现在我想在查询中添加date >= :date
。
我改变了这样的代码:
$stmt = $pdo->prepare('SELECT name, age, something FROM MyTable WHERE MATCH (name, age) AGAINST (:value IN BOOLEAN MODE) AND date >= :date');
$stmt->bindParam(':value', $value, PDO::PARAM_STR);
$stmt->execute(array(':date' => $date));
$results = $stmt->fetchAll();
foreach( $results as $row ) {
但我总是收到这个错误:
致命错误:带有消息'SQLSTATE [HY093]的未捕获异常'PDOException':无效参数编号:绑定变量数与/var/www/username/html/folder/file.php中的标记数不匹配: 136堆栈跟踪:#0 /var/www/username/html/folder/file.php(136):在/ var / www / username / folder / keywords中抛出PDOStatement-> execute(Array)#1 {main}。第136行的PHP
我做错了什么?
答案 0 :(得分:1)
让我看看我是否可以澄清其他提示。
$stmt->bindParam(':value', $value, PDO::PARAM_STR);
这是绑定:value
。你已经得到了
$stmt->execute(array(':date' => $date));
此行覆盖上一行。换句话说,execute
会覆盖您之前使用bindParam
定义的所有内容。因此,使用bindParam
将它们全部绑定,或者使用execute
将它们全部绑定。
答案 1 :(得分:0)
使用
$stmt->bindParam(':date', $date);
而不是将数组传递给execute()
答案 2 :(得分:0)
这就是解决方案:
$stmt->bindParam(':value_final', $value_finial, PDO::PARAM_STR);
$stmt->bindParam(':date', $date);