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);
这是我以前使用的代码:
$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);