Прогнозирование PDO bindValue / BindParam
Я хотел сделать мою жизнь немного проще, как в этом посте:
PDO:: bindParam в цикле foreach, все значения устанавливаются одинаковыми?
И несколько других...
Я попробовал несколько вариантов, чтобы заставить мой код работать (чтобы видеть сообщения), но безрезультатно, что у меня есть методы в моем классе:
public function getMessages($locationId, $name) {
if(!empty($name)) {
$query = 'SELECT * FROM (SELECT * FROM sms WHERE location_id=:locationId ORDER BY id DESC LIMIT 5) AS SOURCE ORDER BY id ASC';
$parameters = array(':locationId' => $locationId);
$row = $this->returnDataObject($query, $parameters);
while ($row) {
$this->fetchData($row, $biggestId, $name);
}
$this->updateSessionKey($locationId, $name);
}
}
И другие:
public function returnDataObject($query, $parameters) {
var_dump($query);
var_dump($parameters);
$dataObject = $this->dbh->prepare($query);
foreach ($parameters as $key => &$value) {
$dataObject->bindParam($key, $value);
}
$dataObject->execute();
$row = $dataObject->fetch(PDO::FETCH_OBJ);
return $row;
}
Я старался:
foreach ($parameters as $key => &$value) {
and:
foreach ($parameters as $key => $value) {
Я старался:
$dataObject->bindParam($key, $value);
and:
$dataObject->bindValue($key, $value);
Я также пытался умереть в методе getMessages ("Я в методе getMessages"); Но я не мог зайти так далеко...
Что я должен сделать по-другому, чтобы этот код работал?
Я ценю любую помощь!
РЕДАКТИРОВАТЬ:
Мой плохой с bigId, но объявляет bigId:
$biggestId = $this->getBiggestId($locationId);
Но исправление не решило всей проблемы. Этот первый метод работает безупречно, если он:
public function getMessages($locationId, $name) {
if(!empty($name)) {
$biggestId = $this->getBiggestId($locationId);
$messages = $this->dbh->prepare('SELECT * FROM (SELECT * FROM sms WHERE location_id=:locationId ORDER BY id DESC LIMIT 5) AS SOURCE ORDER BY id ASC');
$messages->bindParam(':locationId', $locationId);
$messages->execute();
while ($row = $messages->fetch(PDO::FETCH_OBJ)) {
$this->fetchData($row, $biggestId, $name);
}
$_SESSION[$name] = $biggestId;
}
}
Но я хочу использовать метод, поэтому мне не нужно вручную связывать bindParam / BindValue, функциональность метода returnDataObject облегчит мою жизнь...
1 ответ
Внесите следующие изменения:
- использование
fetchAll()
вместоfetch()
- поскольку
fetchAll()
используется, используйтеforeach
а неwhile
петля.
returnDataObject:
public function returnDataObject($query, $parameters) {
$dataObject = $this->dbh->prepare($query);
foreach ($parameters as $key => &$value) {
$dataObject->bindParam($key, $value);
}
$dataObject->execute();
$rows = $dataObject->fetchAll(PDO::FETCH_OBJ);
return $rows;
}
GetMessages:
public function getMessages($locationId, $name) {
if(!empty($name)) {
$query = 'SELECT * FROM (SELECT * FROM sms WHERE location_id=:locationId ORDER BY id DESC LIMIT 5) AS SOURCE ORDER BY id ASC';
$parameters = array(':locationId' => $locationId);
$rows = $this->returnDataObject($query, $parameters);
foreach($rows as $row) {
$this->fetchData($row, $biggestId, $name);
}
$this->updateSessionKey($locationId, $name);
}
}