2013-03-25 2 views
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; 

} 

Но это только говорит мне, что мой массив является пустым. поэтому с моим возвращением должна быть проблема. Как мне это сделать правильно?

Мои записи в базе данных - это статусID, posterID, statusMessage, dateTime, sumRating и sumVotes.

И что делать, если я хочу также вернуть запись другой таблицы? Например, у меня есть данное имя и фамилия имени плаката (posterID) на другом столе. Как мне также вернуть эти данные?

+0

Вы вызываете '$ db-> getStatusMessages' и показывая нам' $ db-> getStatusMessage' (без ** с **) , Что здесь верно? – slugonamission

+0

В функции getStatusMessage() используйте $ results = array(); // Всегда инициализируем переменную перед использованием – Arvind

+0

. Что сказал slugonamission, мне очень помогли. Я такой слепой идиот. Спасибо, я сейчас работаю над этим – loomie

ответ

-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'); 
    } 
} 
+0

Я исправил все ошибки, но теперь я получаю этот erro: Предупреждение: Неверное смещение строки 'statusID' в F: \ xampp \ htdocs \ FinalYear \ smarty \ templates_c \ ab89063f543bf0a8fe20c45b89aad63b616cd7c5.file.home.html. php в строке 94 – loomie

0

Хорошо я получил его. Прежде всего, я допустил ошибку, что я, как сказал @slugonamission, сказал, что я сделал орфографическую ошибку в имени функции. Затем я изменил свой forloop в home.php от

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

к этому, потому что [$ я] в конце сделал forloop использовать только последнюю запись из базы данных, и от этого только первой буквы.

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

Теперь я работаю над тем, как получить данные из других таблиц.

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, чтобы получить связанный INFO

Смежные вопросы