【发布时间】:2014-07-28 18:49:38
【问题描述】:
我想让我的生活变得更轻松,就像这篇文章中一样:
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方法中'); 但我没能走到那一步……
我应该怎样做才能让这段代码正常工作?
感谢您的帮助!
编辑:
我对最大 ID 的不好但声明最大 ID:
$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 方法的功能将使我的生活更轻松......
【问题讨论】:
-
最大标识符从何而来?不应该是locationId吗?您还应该使用 fetchAll 因为您需要数组
-
我修复了这个问题,但这不是大问题的原因。 returnDataObject 方法仍然不起作用...我的代码在不使用此方法的情况下可以完美运行,但方法会让我的生活更轻松...
-
fetchData 没有问题,因为不使用 returnDataObject 它就可以正常工作......