我的网站上有以下代码:
$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。我如何还返回此数据?
答案 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');
}
}