imho.ws |
![]() |
![]() |
![]() |
# 1 |
Junior Member
Регистрация: 03.01.2005
Сообщения: 64
![]() ![]() |
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) |
![]() |
![]() |
# 5 |
Junior Member
Регистрация: 03.01.2005
Сообщения: 64
![]() ![]() |
предложили вот такое решение
$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 соединение с базой происходит, запрос тоже срабатывает ошибка указывает на строку условия цикла в чем загвоздка? в чем проблема? может быть проблема что я на локальной машине отлаживаю? ![]() |
![]() |
![]() |
# 6 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
M@ngust
А что происходит при вставке PHP код:
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
![]() |
![]() |
# 8 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Кстати, ты уверен, что коннект и запрос срабатывают успешно? Не забывай, что исключительные ситуации здесь нужно обрабатывать ручками...
PHP код:
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! Последний раз редактировалось Ghost; 28.02.2005 в 12:52. Причина: склероZzz... |
![]() |
![]() |
# 9 |
Full Member
Регистрация: 29.05.2002
Сообщения: 544
![]() ![]() ![]() ![]() ![]() |
проверка !$result не корректна, т.к. даже если возвращено 0 записей, то $result все равно будет не пустой, следовательно, вернется true и будет продолжаться выполнение скрипта и тогда вот тут:
mysql_fetch_assoc($result) будет ошибка. корректнее будет так: if (mysql_num_rows($result) > 0) а в случае insert, update, delete mysql_affected_rows($result) {оператор_сравнения} 0) оператор будет разным в зависимости от запроса(учитывая и условие выборки), логики приложения(собвстенно что считать "неудачей"). подробнее в мане. p.s. я не слишком нудный? ![]()
__________________
убрано по просьбе администратора ![]() |
![]() |
![]() |
# 10 | ||
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
while ($row = mysql_fetch_assoc($result)) { print_r($row); echo "<br>"; } после проверки из 6 поста, поскольку если ни одной записи в результате нету, и запрос выполнен нормально то все абсолютно верно и цикл while просто не выполнится ниразу. Зачем городить лишнее-то!
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
||
![]() |
![]() |
# 11 |
Junior Member
Регистрация: 03.01.2005
Сообщения: 64
![]() ![]() |
вопрос решен.
проблема была в запросе $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); } |
![]() |
![]() |
# 12 |
::VIP::
Регистрация: 21.08.2004
Адрес: Тула
Сообщения: 351
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Кстати, заместо
$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); * - это типа, выбрать все поля |
![]() |
![]() |
# 13 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Sheryld
Все проверки корректны. Более того, код намерено взят из мануала с офсайта с минимальными дополнениями и изменениями; код проверен - специально в него вставлялись ошибочные значения для конекта, выбора базы и выполнения запроса - скрипт правильным образом "умирал" и выдавал соответсвующие сообщения; без вставленных намерено ошибок скрипт выводил верный результат.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
![]() |
![]() |
# 16 | ||
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
$myDBI = mysql_connect('localhost', 'mysql_user', 'mysql_password'); or die('Could not connect: ' . mysql_error()); так уж "совершеннее" чем Цитата:
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
||
![]() |
![]() |
# 17 |
Full Member
Регистрация: 29.05.2002
Сообщения: 544
![]() ![]() ![]() ![]() ![]() |
а я все же влезу еще разок. почему сразу die? бывает часто, что запрос не возвращает записи по причине того, что просто нету подходящих записей, а бд в порядке.
тогда, обычно выводят альтернативный элемент(скажем заглушку). в нашем же случае вы в любом случае получите <pre>{message}</pre> а если при 0 записей не надо выводить <pre> а нужно выводить скажем <div>not found</div> посему, мне кажется, что лучше все же делать die на конкретных, критических ошибках, а в остальных случаях проверять количество возвращаемых записей и на основе этого уже делать вывод. это все просто размышления...
__________________
убрано по просьбе администратора ![]() |
![]() |
![]() |
# 18 |
Junior Member
Регистрация: 01.11.2002
Адрес: Kyiv, Ukraine
Сообщения: 95
![]() |
в случае с дае мы имеем пошаговую отладку + не тратим силы на лишние ифф, хотя все это из разряда обсуждений высоких материй в контексте пространственно ременного континума и корпускулярно-волнового дуализма, насчет того что 0 записей в результате запроса так это совсем и не ошибка а возвращенный нормальный результат который порядочный программист должен обрабатывать на автомате.
|
![]() |
![]() |
# 19 | ||
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Да и к тому же 0 записей в результате совсем не ошибка, а нормальный пустой результат выборки! Цитата:
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
||
![]() |