【问题标题】:Returning a variable - PHP返回一个变量 - PHP
【发布时间】:2014-04-28 14:43:33
【问题描述】:

我正在尝试显示数组中的信息

这是我的 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)

它在屏幕上输出数组长度。

我怎样才能阻止这种情况?

【问题讨论】:

  • 去掉函数中的echo...?!
  • @mysql_query( — 请不要使用错误抑制运算符来抑制错误消息。请不要使用mysql_* 函数。它们是officially deprecated,不再维护,将来会是removed
  • 旁注:您的案件需要休息

标签: php arrays function


【解决方案1】:

只需更改此行:

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

所以在您的代码中,如果$order01,它将被分配一个值'readed DESC'。您可以使用简单的break statement 来解决此问题,如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多