pdo prepared语句返回空集,查询工作正常

kpbwa7wx  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(351)

下面是执行mysql查询的pdo函数。它对所有查询都正常工作。

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" 
}
pxiryf3j

pxiryf3j1#

您可以自定义您的函数检查 $key bindparam是这样的:

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

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

  if (!is_null($params)) {

    foreach ($params as $key=>$value) {
        $statement->bindParam(":".$key, $value);
    }

  }

  $statement->execute();

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

}
6tqwzwtp

6tqwzwtp2#

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

$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] ]
);

相关问题