PHP,MySQL:bindParam问题

时间:2016-08-27 14:21:24

标签: php mysql pdo 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 ) {

但我总是收到这个错误:

  

致命错误:带有消息'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

我做错了什么?

3 个答案:

答案 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);