php - PDO 准备好的语句返回空集,查询工作正常

标签 php mysql pdo

我有下面的 PDO 函数来执行 Mysql 查询。它对于所有查询都能正常工作。

public function run($sql, array $params = NULL) {

  $statement = $this->pdo->prepare($sql);

  if (!is_null($params)) {

    foreach ($params as $key) {

      $statement->bindParam(":n", $key);

    }

  }

  $statement->execute();

  return $statement->fetchAll(PDO::FETCH_CLASS);

}

但是,当我运行以下查询时,它返回一个空集

$variation = $query->run(
  "SELECT url, title, sale_price
  FROM product
  where category_id = :n
  and url != :n",
  [ $data[0]->category_id, $filePathArray[1] ]
);

当我在 mysql 客户端中手动运行查询时,它可以工作。

我尝试对类别 ID 进行类型转换,但没有任何乐趣:

(int)$data[0]->category_id 

(因为它传递的是字符串而不是整数)

这是 run 函数中 $params 的 var_dump

array(2) { 
  [0]=> int(1) 
  [1]=> string(21) "light-resistance-band" 
}

最佳答案

您需要添加不同的命名占位符来绑定(bind)相应的值(不相同)

$variation = $query->run(
  "SELECT url, title, sale_price
  FROM product
  where category_id = :n
  and url != :n1",
  [ ':n'=>$data[0]->category_id, ':n1'=>$filePathArray[1] ]
);

关于php - PDO 准备好的语句返回空集,查询工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48223027/

相关文章:

php - MySQL - PDO - 如果 POSTS 为 NULL,则允许

php - 比较不同供应商的一组产品 - SQL 与 PHP

php - 在 shell 中运行连接到 mysql 数据库的 php 脚本

php - 使用 laravel voyager 管理面板部署 web 应用程序

PHP 套接字 - 我需要什么来使用它们?

php - 如何组合 3 个 MySQL 表插入

MySQL 隔离级别,测量它们对死锁的影响

javascript - 如何在javascript中获取json数据

mysql - Magento:将 PDO 结果变成 Varien 对象

mysql - UPDATE 查询后的 PDO rowCount() 能否显示 "no changes made"和 "unexisting row"之间的差异?