2013-02-09 3 views
0

Я пытаюсь получить его так, чтобы информация, полученная из этого запроса, сортировалась, прежде чем отображаться на странице сообщением, которое я назначил в качестве первичного ключа. Я получаю эту ошибку, хотя:Сортировка информации из запроса с использованием while?

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>"; 
    } 
} 

?> 

Я думал, что $ сообщения был массив, но не кажется, что это будет работать.

+4

Что-то не так с предложением SQL 'ORDER BY'? – eggyal

+0

Спасибо, исправил. – Sunden

+0

@ Sunden ответили ниже, что помогли вам решить этот вопрос? Если да, не могли бы вы принять этот ответ. –

ответ

2

Посмотрите на the manual page, mysql_query возвращает resource, а не и массив.

И пока вы там, читал, что большое красное предупреждение жира, тот, который говорит, что mysql_ семейство функций осуждается, который среди прочего означает, что вы не должны использовать их в новом коде.

Я также предлагаю забыть о более современном преемнике mysqli_ и сразу же пропустить до PDO - это современный, хорошо продуманный API, который можно использовать с несколькими механизмами баз данных и, наконец, не в последнюю очередь, он делает работу с подготовленными операторами бриз и подготовленные заявления, вероятно, являются наименее дорогостоящими, но наиболее эффективными средствами защиты от sql injection.

Но вернемся к порядку дня: когда вы хотите ResultSet базы данных, которые можно заказать в какой-то мере на сегодняшний день самый простой способ, чтобы сервер базы данных разбирайтесь, как это:

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

Там имеют несколько хороших причин, почему вы должны позволить дБ сортировать данные, а не пытаться сделать это самостоятельно:

  • таким образом вы вынуждены загрузить весь набор результатов в памяти, что является неэффективным и с большим dataets он может исчерпать память, доступную для php
  • , если ваш db хорошо спроектирован, скорее всего, данные уже проиндексированы в столбце, который вы хотите отсортировать, а это значит, что на самом деле сервер не должен сортировать данные при их возврате, что делает всю операцию много Быстрее.
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"); 
1

О людях не использовать @ для подавления ошибок, если у вас есть действительно веские основания.

mysql_query возвращает ресурс: результат запроса. Если вы хотите отсортировать его, вам нужно либо вытащить каждую строку в массив сначала, либо (лучшее решение), используя ORDER BY в запросе, чтобы получить результаты в отсортированном порядке.

0

Я хотел бы сказать, первое, что Mysql является устаревшим в PHP, рекомендуется использовать новое расширение Mysql, Mysqli

Затем вы должны извлечь результаты из ресурса:

$data = array(); 
while($row = mysql_fetch_row($messages)) $data[] = $row; 
Смежные вопросы