![]() |
MySQL проблема с выводом таблицы
решил сделать маленький каталог дисков для себя
есть простая таблица CREATE TABLE cd_disk ( nid int(10) NOT NULL auto_increment, date varchar(10) NOT NULL default '', time varchar(5) NOT NULL default '', cdname varchar(100) NOT NULL default '', text text NOT NULL, tipcd varchar(50) NOT NULL default '', PRIMARY KEY (nid) ) TYPE=MyISAM; задача с выборкой показать последнии записи, например 10 пытался решить но встал на месте сортирую в обратном порядке: $result = sql_query("select nid, date, time, newsname, text, tip from cd_disk order by nid DESC", $dbi); а как сделать сам вывод...? в обычном порядке: наименование(cdname) описание(text) тип диска(tipcd) |
на каком языке пишешь-то?
|
на PHP
|
|
предложили вот такое решение
$result = mysql_query("SELECT nid, date, time, newsname, text, tip FROM cd_disk ORDER BY nid DESC", $dbi); echo "<pre>"; while ($row = mysql_fetch_assoc($result)) { print_r($row); echo "<br>"; } echo "</pre>"; данный код выдает ошибку Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource соединение с базой происходит, запрос тоже срабатывает ошибка указывает на строку условия цикла в чем загвоздка? в чем проблема? может быть проблема что я на локальной машине отлаживаю? :( |
M@ngust
А что происходит при вставке PHP код:
|
может быть проблема что я на локальной машине отлаживаю? :(
|
Кстати, ты уверен, что коннект и запрос срабатывают успешно? Не забывай, что исключительные ситуации здесь нужно обрабатывать ручками...
PHP код:
|
проверка !$result не корректна, т.к. даже если возвращено 0 записей, то $result все равно будет не пустой, следовательно, вернется true и будет продолжаться выполнение скрипта и тогда вот тут:
mysql_fetch_assoc($result) будет ошибка. корректнее будет так: if (mysql_num_rows($result) > 0) а в случае insert, update, delete mysql_affected_rows($result) {оператор_сравнения} 0) оператор будет разным в зависимости от запроса(учитывая и условие выборки), логики приложения(собвстенно что считать "неудачей"). подробнее в мане. p.s. я не слишком нудный? :biggrin: |
Цитата:
Цитата:
while ($row = mysql_fetch_assoc($result)) { print_r($row); echo "<br>"; } после проверки из 6 поста, поскольку если ни одной записи в результате нету, и запрос выполнен нормально то все абсолютно верно и цикл while просто не выполнится ниразу. Зачем городить лишнее-то! |
вопрос решен.
проблема была в запросе $result = sql_query("select nid, date, time, newsname, text, tip from cd_disk order by nid ошибочка была именно в несовпадении запроса правильно будет так: $result = sql_query("select nid, date, time, cdname, text, tipcd from cd_disk order by nid DESC limit 10", $dbi); имена полей. очень помог кусок: if (!$result) { $message = 'Invalid query: ' . mysql_error() . "\n"; $message .= 'Whole query: ' . $query; die($message); } |
Кстати, заместо
$result = sql_query("select nid, date, time, cdname, text, tipcd from cd_disk order by nid DESC limit 10", $dbi); можно написать просто $result = sql_query("select * from cd_disk order by nid DESC limit 10", $dbi); * - это типа, выбрать все поля |
Sheryld
Все проверки корректны. Более того, код намерено взят из мануала с офсайта с минимальными дополнениями и изменениями; код проверен - специально в него вставлялись ошибочные значения для конекта, выбора базы и выполнения запроса - скрипт правильным образом "умирал" и выдавал соответсвующие сообщения; без вставленных намерено ошибок скрипт выводил верный результат. |
updated:
ошибся:) звиняйте хлопцы:) |
Я тут еще вставлю свои 5 копеек насчет кода.
Код конечно рабочий но далек от совершенства и мана - про конструкцию or die() слышали ??? |
Цитата:
$myDBI = mysql_connect('localhost', 'mysql_user', 'mysql_password'); or die('Could not connect: ' . mysql_error()); так уж "совершеннее" чем Цитата:
|
а я все же влезу еще разок. почему сразу die? бывает часто, что запрос не возвращает записи по причине того, что просто нету подходящих записей, а бд в порядке.
тогда, обычно выводят альтернативный элемент(скажем заглушку). в нашем же случае вы в любом случае получите <pre>{message}</pre> а если при 0 записей не надо выводить <pre> а нужно выводить скажем <div>not found</div> посему, мне кажется, что лучше все же делать die на конкретных, критических ошибках, а в остальных случаях проверять количество возвращаемых записей и на основе этого уже делать вывод. это все просто размышления... |
в случае с дае мы имеем пошаговую отладку + не тратим силы на лишние ифф, хотя все это из разряда обсуждений высоких материй в контексте пространственно ременного континума и корпускулярно-волнового дуализма, насчет того что 0 записей в результате запроса так это совсем и не ошибка а возвращенный нормальный результат который порядочный программист должен обрабатывать на автомате.
|
Цитата:
Да и к тому же 0 записей в результате совсем не ошибка, а нормальный пустой результат выборки! Цитата:
|
Часовой пояс GMT +4, время: 10:48. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.