我想让我的生活更轻松一点,就像在这篇文章里:
PDO::bindParam in a foreach loop, all values are being set as the same?
还有其他几个..。
我尝试了几个变体来完成我的代码工作(查看消息),但是没有结果,我必须在类中使用方法:
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方法中”),但是我不能走那么远。
为了让代码工作,我应该做什么不同的工作呢?
我很感激你的帮助!
编辑:
我对biggestId不好,但声明biggestId:
$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方法的功能将使我的生活更容易……
发布于 2014-06-07 18:57:10
作出以下修改:
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);
}
}https://stackoverflow.com/questions/24099798
复制相似问题