如何正确返回数组以供进一步使用?

时间:2013-03-25 11:40:59

标签: php sql arrays smarty

我的网站上有以下代码:

$statusMessageSQL = "SElECT * FROM statusmessages";
$statusMessagePrepare = $db->prepare($statusMessageSQL);
$statusMessagePrepare->execute();
$statusMessageResult = $statusMessagePrepare->fetchAll();
foreach($statusMessageResult as $row){
    $row['username']=$db->getUsername($db->getUserNameById($row['posterID']));
    $results[] = $row;
    $smarty->assign('results', $results);
}

它没有任何问题,但现在我想将大部分内容放在我的数据库类中以更加面向对象。但是我在返回数组时遇到了一些问题。我做了这个

$statusMessage = $db->getStatusMessages();
var_dump($statusMessage);

功能:

function getStatusMessage(){
    $statusMessageSQL = "SElECT * FROM statusmessages";
    $statusMessagePrepare = $db->prepare($statusMessageSQL);
    $statusMessagePrepare->execute();
    $statusMessageResult = $statusMessagePrepare->fetchAll();
    foreach($statusMessageResult as $row){
        $row['username']=$db->getUsername($db->getUserNameById($row['posterID']));
        $results[] = $row;
}
    return $results;

}

但这只是告诉我,我的数组是空的。所以我回来时一定有问题。我该如何正确地做到这一点?

我的数据库条目是statusID,posterID,statusMessage,dateTime,sumRating和sumVotes。

如果我还要返回另一个表的条目,该怎么办?就像,我在另一张桌子上有海报(posterID)的givenName和familyName。我如何还返回此数据?

3 个答案:

答案 0 :(得分:0)

好的,我明白了。首先,我犯了错误,我 - 就像@slugonamission所说的那样 - 我在函数名中犯了一个拼写错误。然后,我从

中更改了home.php中的forloop
$statusMessage = $db->getStatusMessage();
for($i = 0; $i < sizeof($statusMessage); $i++){
$smarty->assign('results', $statusMessage[$i]);
}

到此,因为最后的[$ i]使得forloop只使用了数据库的最后一个条目而且只使用了第一个字母。

$statusMessage = $db->getStatusMessage();
for($i = 0; $i < sizeof($statusMessage); $i++){
$smarty->assign('results', $statusMessage);
}

现在我正在研究的是如何从其他表中获取数据。

答案 1 :(得分:0)

function getStatusMessage(){
    global $db; // this is what you actually need to make function work

    $sql = "SElECT s.*, username FROM statusmessages s JOIN users u ON posterID.=u.id";
    $stm = $db->prepare($sql);
    $stm->execute();
    return $stm->fetchAll();
}

请注意,您必须使用JOIN来获取相关信息

答案 2 :(得分:-1)

您必须将$db变量解析为您的函数:

function my_function() {
  global $db;

  // some code
}

或者像这样使用它:

class myClass {
  private $db;

  public function __construct() {

    $this->db = new MySQLi("host","user","pass","db");

  }

  public function my_function() {
    $my_db_query = $this->db->query('query');
  }
}