Я создаю объект базы данных, который соединяет объект PDO
с объектом PDOStatement
, чтобы цепочка была доступна. В основном я просто использую методы, которые я чаще всего использую, но bindParam
дает мне трудное время.
private $stmt = null;
...
public function prepare($statement,array $driver_options = array()) {
if($this->stmt) throw new \Exception('PDO Statement already prepared, no override!');
$this->stmt = parent::prepare($statement, $driver_options);
return $this;
}
public function bindParam($place, &$val, $dataType){
if(!$this->stmt) throw new \Exception('PDO Statement is empty');
$this->stmt->bindParam($place, $val, $dataType);
return $this;
}
public function execute(array $params = array()){
if(!$this->stmt) throw new \Exception('PDO Statement is empty');
$this->stmt->execute($params);
return $this;
}
public function fetchAll($pdoFetchType){
if(!$this->stmt) throw new \Exception('PDO Statement is empty');
return $this->stmt->fetchAll($pdoFetchType);
}
...
public function getStmt(){
return $this->stmt;
}
public function clearStmt(){
$this->stmt = null;
}
Я получаю ошибку, начиная с заголовка, в этом коде:
$i = 0;
$db->prepare('SELECT * FROM users LIMIT ?,1')->bindParam(1, $i, \PDO::PARAM_INT);
while($row = $db->execute()->fetchAll(\PDO::FETCH_ASSOC)){
echo "<pre>".print_r($row, true)."</pre>";
$i++;
}
В основном то, что я узнал об этой ошибке, заключается в том, что оно возникает, когда предоставленные переменные в bindParam
равны null
, но $i
явно не является нулевым. Можете ли вы мне помочь?
EDIT: также работает
var_dump($this->stmt->bindParam($place, $val, $dataType));
в методе bindParam
возвращает TRUE
. Из руководства:
Возвращаемые значения
Возвращает TRUE при успешном завершении или FALSE при сбое.
Успешно, но не связывает параметр??? Я чувствую, что мой мозг скоро взорвется.