imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 27.02.2005, 16:55     # 1
M@ngust
Junior Member
 
Аватар для M@ngust
 
Регистрация: 03.01.2005
Сообщения: 64

M@ngust Нимб уже пробиваетсяM@ngust Нимб уже пробивается
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)
M@ngust вне форума  
Старый 27.02.2005, 19:47     # 2
Aeon
::VIP::
 
Аватар для Aeon
 
Регистрация: 28.06.2002
Адрес: neverwhere
Сообщения: 1 166

Aeon Имеются все основания чтобы гордиться собойAeon Имеются все основания чтобы гордиться собойAeon Имеются все основания чтобы гордиться собойAeon Имеются все основания чтобы гордиться собойAeon Имеются все основания чтобы гордиться собойAeon Имеются все основания чтобы гордиться собойAeon Имеются все основания чтобы гордиться собойAeon Имеются все основания чтобы гордиться собойAeon Имеются все основания чтобы гордиться собойAeon Имеются все основания чтобы гордиться собойAeon Имеются все основания чтобы гордиться собой
на каком языке пишешь-то?
Aeon вне форума  
Старый 28.02.2005, 06:33     # 3
M@ngust
Junior Member
 
Аватар для M@ngust
 
Регистрация: 03.01.2005
Сообщения: 64

M@ngust Нимб уже пробиваетсяM@ngust Нимб уже пробивается
на PHP
M@ngust вне форума  
Старый 28.02.2005, 06:57     # 4
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
M@ngust
http://ru.php.net/manual/en/function.mysql-query.php
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 28.02.2005, 12:12     # 5
M@ngust
Junior Member
 
Аватар для M@ngust
 
Регистрация: 03.01.2005
Сообщения: 64

M@ngust Нимб уже пробиваетсяM@ngust Нимб уже пробивается
предложили вот такое решение

$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 вне форума  
Старый 28.02.2005, 12:14     # 6
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
M@ngust
А что происходит при вставке
PHP код:
if (!$result) {
   
$message  'Invalid query: ' mysql_error() . "\n";
   
$message .= 'Whole query: ' $query;
   die(
$message);

?
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 28.02.2005, 12:22     # 7
M@ngust
Junior Member
 
Аватар для M@ngust
 
Регистрация: 03.01.2005
Сообщения: 64

M@ngust Нимб уже пробиваетсяM@ngust Нимб уже пробивается
может быть проблема что я на локальной машине отлаживаю?
M@ngust вне форума  
Старый 28.02.2005, 12:43     # 8
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Кстати, ты уверен, что коннект и запрос срабатывают успешно? Не забывай, что исключительные ситуации здесь нужно обрабатывать ручками...
PHP код:
<?php
$myDBI 
mysql_connect('localhost''mysql_user''mysql_password');
if (!
$myDBI) { die('Could not connect: ' mysql_error()); }
echo 
'Connected successfully';
$db_selected mysql_select_db('db_name'$myDBI);
if (!
$db_selected) { die ('Can\'t use dbname: ' mysql_error()); }
$query "...";
$result mysql_query($query$myDBI);
if (!
$result) { 
   
$message  'Invalid query: ' mysql_error() . "\n"
   
$message .= 'Whole query: ' $query
   die(
$message); 
}
echo 
"<pre>";
while (
$row mysql_fetch_assoc($result)) {
   
print_r($row);
   echo 
"<br>";
}
echo 
"</pre>";
mysql_free_result($result);
mysql_close($myDBI);
?>
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!

Последний раз редактировалось Ghost; 28.02.2005 в 12:52. Причина: склероZzz...
Ghost вне форума  
Старый 28.02.2005, 14:14     # 9
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
проверка !$result не корректна, т.к. даже если возвращено 0 записей, то $result все равно будет не пустой, следовательно, вернется true и будет продолжаться выполнение скрипта и тогда вот тут:

mysql_fetch_assoc($result)

будет ошибка.

корректнее будет так:

if (mysql_num_rows($result) > 0)

а в случае insert, update, delete

mysql_affected_rows($result) {оператор_сравнения} 0)

оператор будет разным в зависимости от запроса(учитывая и условие выборки), логики приложения(собвстенно что считать "неудачей").

подробнее в мане.

p.s. я не слишком нудный?
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 28.02.2005, 16:06     # 10
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Sheryld:
проверка !$result не корректна, т.к. даже если возвращено 0 записей, то $result все равно будет не пустой,
И все остальное это понятно, только Ghost в 6 посте говорил не про количество результатов в выборке, а проверить нормально ли вообще выполнился запрос (посмотри что выводится в описании), так что все верно и проверка вполне корректна.
Цитата:
Sheryld:
корректнее будет так:

if (mysql_num_rows($result) > 0)
Да вполне корректно и так:
while ($row = mysql_fetch_assoc($result)) {
print_r($row);
echo "<br>";
}
после проверки из 6 поста, поскольку если ни одной записи в результате нету, и запрос выполнен нормально то все абсолютно верно и цикл while просто не выполнится ниразу. Зачем городить лишнее-то!
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 28.02.2005, 16:12     # 11
M@ngust
Junior Member
 
Аватар для M@ngust
 
Регистрация: 03.01.2005
Сообщения: 64

M@ngust Нимб уже пробиваетсяM@ngust Нимб уже пробивается
вопрос решен.
проблема была в запросе
$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);
}
M@ngust вне форума  
Старый 28.02.2005, 16:24     # 12
DeADMoroZ
::VIP::
 
Аватар для DeADMoroZ
 
Регистрация: 21.08.2004
Адрес: Тула
Сообщения: 351

DeADMoroZ СэнсэйDeADMoroZ СэнсэйDeADMoroZ СэнсэйDeADMoroZ СэнсэйDeADMoroZ СэнсэйDeADMoroZ СэнсэйDeADMoroZ СэнсэйDeADMoroZ СэнсэйDeADMoroZ СэнсэйDeADMoroZ СэнсэйDeADMoroZ СэнсэйDeADMoroZ Сэнсэй
Кстати, заместо
$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);
* - это типа, выбрать все поля
DeADMoroZ вне форума  
Старый 28.02.2005, 16:28     # 13
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Sheryld
Все проверки корректны. Более того, код намерено взят из мануала с офсайта с минимальными дополнениями и изменениями; код проверен - специально в него вставлялись ошибочные значения для конекта, выбора базы и выполнения запроса - скрипт правильным образом "умирал" и выдавал соответсвующие сообщения; без вставленных намерено ошибок скрипт выводил верный результат.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 28.02.2005, 16:41     # 14
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
updated:

ошибся звиняйте хлопцы
__________________
убрано по просьбе администратора

Последний раз редактировалось Sheryld; 28.02.2005 в 16:44.
Sheryld вне форума  
Старый 01.03.2005, 15:53     # 15
Sych
Junior Member
 
Регистрация: 01.11.2002
Адрес: Kyiv, Ukraine
Сообщения: 95

Sych Мелкий засранец
Я тут еще вставлю свои 5 копеек насчет кода.

Код конечно рабочий но далек от совершенства и мана - про конструкцию or die() слышали ???
Sych вне форума  
Старый 01.03.2005, 16:05     # 16
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Sych:
Код конечно рабочий но далек от совершенства и мана - про конструкцию or die() слышали ???
Это уже конечно флейм пошел, но тоже тогда отвечу (1 раз), чем интересно конструкция
$myDBI = mysql_connect('localhost', 'mysql_user', 'mysql_password'); or die('Could not connect: ' . mysql_error());
так уж "совершеннее" чем
Цитата:
Ghost:
$myDBI = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$myDBI) { die('Could not connect: ' . mysql_error()); }
??? Только тем что в одну строчку?
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 01.03.2005, 17:30     # 17
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
а я все же влезу еще разок. почему сразу die? бывает часто, что запрос не возвращает записи по причине того, что просто нету подходящих записей, а бд в порядке.

тогда, обычно выводят альтернативный элемент(скажем заглушку). в нашем же случае вы в любом случае получите <pre>{message}</pre>
а если при 0 записей не надо выводить <pre> а нужно выводить скажем <div>not found</div>

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

это все просто размышления...
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 01.03.2005, 17:47     # 18
Sych
Junior Member
 
Регистрация: 01.11.2002
Адрес: Kyiv, Ukraine
Сообщения: 95

Sych Мелкий засранец
в случае с дае мы имеем пошаговую отладку + не тратим силы на лишние ифф, хотя все это из разряда обсуждений высоких материй в контексте пространственно ременного континума и корпускулярно-волнового дуализма, насчет того что 0 записей в результате запроса так это совсем и не ошибка а возвращенный нормальный результат который порядочный программист должен обрабатывать на автомате.
Sych вне форума  
Старый 01.03.2005, 19:21     # 19
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Sheryld:
а я все же влезу еще разок. почему сразу die? бывает часто, что запрос не возвращает записи по причине того, что просто нету подходящих записей, а бд в порядке.......
При коннекте никаких записей получено быть не должно и в 99% случев это критическая ошибка!
Да и к тому же 0 записей в результате совсем не ошибка, а нормальный пустой результат выборки!

Цитата:
Sych:
в случае с дае мы имеем пошаговую отладку + не тратим силы на лишние ифф,
Конструкция "что-то or die()" это посути тотже иф, и ничего не тратится больше ни в том ни в другом случае!
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 10:53.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.