首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入PDO bindValue / BindParam

导入PDO bindValue / BindParam
EN

Stack Overflow用户
提问于 2014-06-07 17:25:11
回答 1查看 216关注 0票数 0

我想让我的生活更轻松一点,就像在这篇文章里:

PDO::bindParam in a foreach loop, all values are being set as the same?

还有其他几个..。

我尝试了几个变体来完成我的代码工作(查看消息),但是没有结果,我必须在类中使用方法:

代码语言:javascript
复制
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);
    }
}

另一个:

代码语言:javascript
复制
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;

}

我试过:

代码语言:javascript
复制
foreach ($parameters as $key => &$value) {
and:
foreach ($parameters as $key => $value) {

我试过:

代码语言:javascript
复制
$dataObject->bindParam($key, $value);
and:
$dataObject->bindValue($key, $value);

我还试着用getMessages方法去死(“我在getMessages方法中”),但是我不能走那么远。

为了让代码工作,我应该做什么不同的工作呢?

我很感激你的帮助!

编辑:

我对biggestId不好,但声明biggestId:

代码语言:javascript
复制
$biggestId = $this->getBiggestId($locationId);

但解决这个问题并不能解决整个问题。如果是这样的话,第一种方法可以很好地工作:

代码语言:javascript
复制
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方法的功能将使我的生活更容易……

EN

回答 1

Stack Overflow用户

发布于 2014-06-07 18:57:10

作出以下修改:

  • 使用fetchAll()而不是fetch()
  • 由于使用了fetchAll(),所以使用foreach而不是while循环。

returnDataObject:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24099798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档