PHP、MySQL:bindParam 问题

PHP, MySQL: Issue with bindParam

这是我以前使用的代码:

$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 ) {

但我总是收到这个错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in /var/www/username/html/folder/file.php:136 Stack trace: #0 /var/www/username/html/folder/file.php(136): PDOStatement->execute(Array) #1 {main} thrown in /var/www/username/folder/keywords.php on line 136

我做错了什么?

使用

$stmt->bindParam(':date', $date); 而不是将数组传递给 execute()

让我看看是否可以澄清其他提示。

$stmt->bindParam(':value', $value, PDO::PARAM_STR);

这是绑定 :value。你已经明白了

$stmt->execute(array(':date' => $date));

这一行覆盖前一行。换句话说,execute 会覆盖您之前使用 bindParam 定义的任何内容。所以使用 bindParam 绑定它们或者使用 execute 绑定它们。你不能混搭

这就是解决方案:

$stmt->bindParam(':value_final', $value_finial, PDO::PARAM_STR);
$stmt->bindParam(':date', $date);