PDO预处理语句返回空集,查询工作正常

时间:2018-01-12 09:20:41

标签: 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 

(因为它传递了一个字符串而不是整数)

这是运行函数

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

2 个答案:

答案 0 :(得分:0)

您可以自定义函数,检查$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);

}

答案 1 :(得分:0)

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

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