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;

}

しかし、これは私の配列がnullであることを教えてくれます。ですから、私の帰国には問題があるに違いありません。正しく行うにはどうすればよいですか?

私のデータベース エントリは、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 に答える