0

我正在尝试获取它,以便从此查询中检索到的信息在通过我已指定为主键的 messageid 显示到页面上之前进行排序。我不断收到此错误:

Warning: krsort() expects parameter 1 to be array, resource given in ...

这是我的代码:

<?php

$id = $_SESSION[id];
$messages = @mysql_query("SELECT * FROM messages WHERE receiver='$id'");
$messagecount = mysql_num_rows($messages);
krsort($messages);

if ($messagecount == 0)
{
echo "<br>You have no messages.";
}
else
{
while ($messages2 = mysql_fetch_array($messages))
    {
    echo "<table width=800 class=\"normaltable\" cellpadding=\"3\" border=\"0\"><tr>
    <td class=\"tdmessagesubject\"><b>Subject:</b><a href=message.php?id=" .   $messages2['messageid'] . "> " . $messages2['subject'] . "</a></td>
    <td class=\"tdmessagefrom\"><b>From:</b> " . $messages2['sendercallname'] . "</td>   </tr>
    </table>";
    }
 }

?>

我认为 $messages 是一个数组,但它似乎不起作用。

4

4 回答 4

2

看看手册页,mysql_query 返回一个resource,不是和数组。

当你在那里时,请阅读那个红色的大警告,它说 mysql_ 系列函数已被弃用,这意味着你不应该在新代码中使用它们。

我还建议忘记更现代的 mysqli_ 继任者并立即跳到PDO - 它是一个现代的、设计良好的 API,可与多个数据库引擎一起使用,最后但并非最不重要的一点是,它使使用准备好的语句变得轻而易举,并且准备好了语句可能是最便宜但最有效的防御sql 注入的方法。

但是回到当天的顺序:当您希望以某种方式对数据库结果集进行排序时,最简单的方法是让数据库服务器对其进行排序,如下所示:

$messages = @mysql_query("SELECT * FROM messages WHERE receiver='$id' order by messageid");

有几个很好的理由让数据库对数据进行排序而不是自己尝试:

  • 这样你就不得不将整个结果集加载到内存中,这是低效的,而且结果集很大,它会耗尽 php 可用的内存
  • 如果你的数据库设计得很好,很可能数据已经在你想要排序的列上建立了索引,这意味着服务器在返回它们时实际上不必对数据进行排序,从而使整个操作更快。
于 2013-02-10T00:02:16.307 回答
1

您的$messages变量不是数组。要从数据库查询构建消息数组,您应该使用:

$result = @mysql_query("SELECT * FROM messages WHERE receiver='$id'");
$messages = array();
while ($message = mysql_fetch_assoc($result)) {
    $messages[] = $message;
}

在这里您可以找到一个使用 mysql_fetch_assoc 的示例:http: //php.net/manual/en/function.mysql-fetch-array.php

如果要在数据库查询中对消息进行排序,则应使用ORDER BY语句。例如:

$result = @mysql_query("SELECT * FROM messages WHERE receiver='$id' ORDER BY id");
于 2013-02-10T00:01:43.597 回答
1

@哦,除非您有充分的理由,否则不要使用来抑制错误。

mysql_query返回一个资源:查询结果。如果要对其进行排序,则需要先将每一行提取到数组中,或者(更好的解决方案)ORDER BY在查询中使用以按排序顺序获取结果。

于 2013-02-10T00:02:04.807 回答
0

首先要说的是,PHP中不推荐使用Mysql,建议使用新的Mysql扩展,Mysqli

然后,您必须从资源中提取结果:

$data = array();
while($row = mysql_fetch_row($messages)) $data[] = $row;
于 2013-02-10T00:02:07.197 回答