0

我的网站上有以下代码:

$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。我如何也返回这些数据?

4

3 回答 3

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 来获取相关信息

于 2013-03-25T12:34:13.430 回答
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);
}

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

于 2013-03-25T11:59:43.417 回答
-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');
  }
}
于 2013-03-25T11:45:25.130 回答