Почему данные из базы данных не сортируются в PHP PDO?
Делал чат, для этого создал таблицу в MySQL, которая называется messages (имеет 4 столбца: ID, user1, user2 и message) и подключился к ней через pdo query:
$messages = $pdo->query('select * from messages where (user1="'.$_SESSION['user_name'].'" and user2="'.$_POST['user2'].'") or (user2="'.$_SESSION['user_name'].'" and user1="'.$_POST['user2'].'") ORDER by id'); while($message = $messages->fetch()){ if($message['user1'] == $_SESSION['user_name']){ echo " <div id='message'>".$_SESSION['user_name'].": ".$message['message']."</div> "; } if($message['user2'] == $_SESSION['user_name']){ echo " <div id='message'>".$_POST['user2'].": ".$message['message']."</div> "; } |
$messages = $pdo->query('select * from messages where (user1="'.$_SESSION['user_name'].'" and user2="'.$_POST['user2'].'") or (user2="'.$_SESSION['user_name'].'" and user1="'.$_POST['user2'].'") ORDER by id'); while($message = $messages->fetch()){ if($message['user1'] == $_SESSION['user_name']){ echo " <div id='message'>".$_SESSION['user_name'].": ".$message['message']."</div> "; } if($message['user2'] == $_SESSION['user_name']){ echo " <div id='message'>".$_POST['user2'].": ".$message['message']."</div> "; }
Но примерно на 20 сообщении сортировка нарушается. Почему?
Дополнительно:
сортировка нарушается.
Как именно? и как именно это определено? Подробности в студию. Например, вместо [censored] "создал таблицу в MySQL, которая называется messages (имеет 4 столбца: ID, user1, user2 и message)" выложите полный вывод SHOW CREATE TABLE messages;
Там расставлено правильно, но на самом сайте перемешано примерно на 20 сообщении.
1) У тебя закрывающаяся фигурная скобка пропущена в приведенном коде.
2) Запрос правильный, от старых к новым.
3) Не забывай про защиту от SQL-инъекций, подставляй данные через плейсхолдеры
4) И самое главное внимательно посмотри на свои if. Ты всегда выводишь реплики только одного участника чата.
-
2) Запрос правильный, от старых к новым.
от новых к старым т.к. там ASC, а в остальном согласен
- Антон Шаманов,
от новых к старым
при всем моем уважение все же ASC (ascending - восходящий) это от меньшего к большему, а в нашем случае это от старых к новым, потому что новые записи будут иметь больший id.
- YepBro, а! в моей голове это звучало по другому
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для того чтобы данные из базы данных сортировались правильно при использовании PHP PDO, необходимо убедиться, что вы правильно используете оператор сортировки в вашем SQL запросе.
Прежде всего, убедитесь, что вы используете оператор ORDER BY в вашем SQL запросе для указания поля, по которому нужно провести сортировку. Например, если вы хотите отсортировать результаты по полю "name" в порядке возрастания, ваш SQL запрос должен выглядеть примерно так:
$stmt = $pdo->prepare("SELECT * FROM table_name ORDER BY name ASC"); $stmt->execute();
Если вы хотите отсортировать данные в порядке убывания, используйте ключевое слово DESC:
$stmt = $pdo->prepare("SELECT * FROM table_name ORDER BY name DESC"); $stmt->execute();
Также убедитесь, что вы правильно подключились к базе данных и обработали ошибки, которые могут возникнуть при выполнении запроса. Для этого можно использовать конструкцию try-catch:
try { $pdo = new PDO("mysql:host=localhost;dbname=mydatabase", "username", "password"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo "Ошибка подключения: " . $e->getMessage(); }
Также не забудьте проверить, что данные в базе данных действительно содержат значения, которые можно отсортировать. Возможно, ваши данные не содержат нужных значений для сортировки, или они содержатся в неправильном формате.
Если после всех этих шагов данные все еще не сортируются, попробуйте вывести на экран сам SQL запрос, который вы отправляете в базу данных, чтобы убедиться, что он составлен правильно. Возможно, проблема кроется в неправильном форматировании запроса.
Надеюсь, эти советы помогут вам разобраться с проблемой сортировки данных в PHP PDO. Если у вас остались вопросы, не стесняйтесь задавать их!