2014-04-28 113 views
-5

我試圖從一個數組返回一個變量 - PHP

這裏顯示的信息是我的PHP代碼:

<? 

include('class.prmessage.php'); 
$mess = new OMessaging(true); 
$array = $mess->GetAllMesseges(0,9); 
?> 

,這是它調用函數:

function GetAllMesseges($order = 0, $receiver = '', $sender = '') 
{ 
    switch($order) 
    { 
     case 0: 
      $order = 'readed ASC'; 
     case 1: 
      $order = 'readed DESC'; 
    } 
    $where = ''; 
    if(strlen($receiver) > 0 && strlen($sender) > 0) 
     $where = ' AND '; 

    $where = ((strlen($receiver) > 0)?'receiver=' . $receiver:'') . $where . ((strlen($sender) > 0)?'sender=' . $sender:''); 

    $result = @mysql_query("SELECT * FROM ".$this->tblName." WHERE $where ORDER BY $order"); 

    if(!$result) 
     return 1; 
    echo $num = mysql_num_rows($result); 
    $messege = ''; 
    for($i = 0 ; $i < $num ; $i++) 
    { 
     $row = mysql_fetch_object($result); 
     $messege[$i]['receiver'] = $row->receiver; 
     $messege[$i]['sender'] = $row->sender; 
     $messege[$i]['title'] = $row->title; 
     $messege[$i]['body'] = $row->body; 
     $messege[$i]['readed'] = $row->readed; 
     $messege[$i]['date'] = $row->date; 
    } 
    if(!is_array($messege)) 
     return 2; 
    return $messege; 

我可以訪問所有我想訪問的信息,但是當我聲明數組時:

$array = $mess->GetAllMessages(0,9) 

它在屏幕上輸出數組長度。

我該如何阻止?

+3

擺脫函數中的'echo' ...! – deceze

+3

'@mysql_query(' - 請不要使用錯誤抑制運算符來抑制錯誤信息,也請不要使用'mysql_ *'函數,它們[正式棄用](https://wiki.php.net/ rfc/mysql_deprecation),不再維護,將來會被[刪除](http://php.net/manual/en/function.mysql-connect.php#warning) –

+1

旁註:您需要休息(s) –

回答

3

只是改變這一行:

echo $num = mysql_num_rows($result); 

要這樣:

$num = mysql_num_rows($result); 

有你可能想在你的代碼來解決,雖然其他問題。由於Amal points outmysql包已正式被棄用。從official documentation

警告這個擴展不贊成PHP 5.5.0,並且將 在未來刪除。應該使用MySQLiPDO_MySQL 擴展名。有關更多信息,另請參閱MySQL: choosing an API指南 和related FAQ

此外,您的switch statement已損壞。如果沒有break聲明,執行將會「落空」到下一個case標籤。例如:

$order = 0; 
switch($order) 
{ 
    case 0: 
     echo 'readed ASC <br>'; 
    case 1: 
     echo 'readed DESC <br>'; 
} 

將打印線:

readed ASC 
readed DESC 

因此,在你的代碼,如果$order要麼01,它會被分配'readed DESC'值。你可以用一個簡單的break statement來解決這個問題,像這樣:

switch($order) 
{ 
    case 0: 
     $order = 'readed ASC'; 
     break; 
    case 1: 
     $order = 'readed DESC'; 
} 
+0

無盡的失望,謝謝! – Olleh