помогите ПОЖАЛУЙСТА. При попытке вывода инфы из бд





соед с бд



< ?php
$db = mysql_connect("localhost","vlad","123");
mysql_select_db("first",$db);
$result=mysql_query("SELECT * FROM firma",$db);
$n = mysql_fetch_array("$result");
echo $n

?>




в браузере выдает:
mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\myscl.php on line 13
Чего я не сделал??

@темы: MySQL, PHP

Комментарии
05.11.2008 в 02:35

Зря взял в двойные кавычки $result
05.11.2008 в 02:47

Sanctus Satanas
Кстати, если у вас только одно соединение с БД внутри скрипта, то указывать его идентификатор необязательно.
И использовать везде двойные кавычки вместо одинарных тоже, мне кажется, ни к чему.
Ещё я сильно подозреваю, что в выводе вы получите не совсем то, что хотели. mysql_fetch_array() выбирает только один ряд запроса. Более того, поля запроса записываются в вашу переменную как ассоциативный массив, где имена ключей — названия полей. Т.е. если вы так хотели вывести некую длинную таблицу с несколькими полями, то у вас ничего не получится.
05.11.2008 в 03:40

Убрал но ничего не изменилось(
получаю то же сообщ: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\myscl.php on line 12

ТО ЕСТЬ НА СТРОКЕ: $n = mysql_fetch_array($result);

??вЫВЕСТИ ХОТЕЛ ТОЛЬКО ПЕРВУЮ СТРОКУ БД Т.К. УЧУСЬ:(
05.11.2008 в 05:03

Sanctus Satanas
Ну значит у вас mysql_query() вернул FALSE. Перед тем, как пытаться читать ряды данных, проверьте, успешен ли вообще был запрос.
Например, так:

$result = mysql_query('SELECT * FROM firma') or die(mysql_error());

Только потом в готовом коде не забудьте заменить все mysql_error() на что-нибудь другое. Негоже простым пользователям знать об устройстве вашей базы данных.
05.11.2008 в 13:50

ТЕПЕРЬ вижу в браузере Table 'first.first' doesn't exist.
таблица назыв first а он ее два раза пишет плюс точка К чему это?)
05.11.2008 в 13:58

Never Say Never (c)
а первое first - это имя базы ( выбирается через mysql_select_db("first",$db); )

и вообще должно писать не 'first.first' а 'first.firma'

может в select написал 'SELECT * FROM first' ?
05.11.2008 в 14:15

Всё будет Кока-Кола.
< ?php
mysql_connect("localhost","vlad","123");
mysql_select_db("first");
$result=mysql_query("SELECT * FROM `firma`");
$n = mysql_fetch_array($result);
var_dump($n);
?>

Вроде так.
05.11.2008 в 15:40

Sanctus Satanas
Джей Ди
А нахрена кавычки у firma? Это же не ключевое слово и спецсимволов нет.
Почему-то про FALSE вы тоже забыли. Если запрос был неверным, mysql_query() вернёт FALSE. Это совсем ни разу не «valid MySQL result resource».
05.11.2008 в 16:09

если кого нибудь запутал то не специально
вот исправленный код (бд называется first):


< ?php
$db = mysql_connect("localhost","vlad","123");
mysql_select_db("first",$db);
$result=mysql_query("SELECT * FROM FIRST")or die(mysql_error());
$n = mysql_fetch_array($result);
var_dump($n);

?>

а мне в ответ Table 'first.first' doesn't exist.
05.11.2008 в 16:12

Sanctus Satanas
vali
Ну значит у вас нет таблицы с названием first в базе данных с названием first.
05.11.2008 в 17:14

Всё будет Кока-Кола.
--==SS==-- я люблю стандартизацию. А вот если запрос быдет неверен, то ошбка явно не в скрипте. Следовательно копайте базу.
В простых сценариях можно и опустить обработку искючений, зачем перегружать мизерный код?
05.11.2008 в 18:10

Sanctus Satanas
Джей Ди
Ну почему же явно? В первоначальном тексте vali та же ошибка появлялась бы независимо от правильности запроса. А так можно точно локализовать ошибку. Вы же любите стандартизацию? Так почему бы сразу не писать правильно даже в небольших текстах? ;-) И я всё-таки считаю, что конечный пользователь при ошибке должен получить что-то более осмысленное, чем пустую страницу.
05.11.2008 в 19:02

Sanctus Satanas
Кстати, советую почитать: kurepin.ru/php/zametki/quotes/
Я даже могу сказать, что разница между ' и " по скорости примерно в два раза, если требуется вставка переменных. Если не требуется, то разница в несколько процентов.
05.11.2008 в 19:54

Всё будет Кока-Кола.
--==SS==-- ой боже, я наверное уже слишком старомоден для того что бы сравнивать кавычки.
05.11.2008 в 21:13

Sanctus Satanas
Ну фиг знает. Почему бы и нет? )
06.11.2008 в 10:05

А какая ошибка может быть в базе?
Что делать если даже простая база не хочет выводится.(
to SS Название базы правильное в чем еще косяк может быть?
06.11.2008 в 14:57

Sanctus Satanas
vali
Ну пускай название базы правильное. А вы уверены, что название таблицы в базе правильное? Вы в первом сообщение писали запрос, который должен выводить данные из таблицы "firma", а потом стали писать "SELECT * FROM FIRST", т.е. пытаться выводить данные из таблицы "first". Это ведь не одно и то же.
06.11.2008 в 15:29

Всё будет Кока-Кола.
попробуйте сделать так:

$q=mysql_query('SHOW TABLES');
while($b=mysql_fetch_assoc($q))
var_dump($b);
06.11.2008 в 16:24

Sanctus Satanas
Вообще для этого лучше взять phpMyAdmin и не выпендриваться.
06.11.2008 в 23:23

To SS. Базы две. Вначале по ошибке писал firma но вывести хотел first. Если использую phpMyAdmin все равно табл не выводит.

то Джей Ди: Выводит
array(1) { ["Tables_in_first"]=> string(7) "???????" }
Что это значит? зеленый я надо идти книги читать)
08.11.2008 в 13:22

vali структуру базы запости сюда - какие таблицы, какие поля, что тебе надо вывести. это делается за 2 минуты.
Первым делом проверь запрос в phpmyadmin или лучше скачать бесплатный MySQL QueryBrowser.
08.11.2008 в 20:08

Sanctus Satanas
+1. vali, опиши подробно всю структуру базы. Во-первых, как называется база данных, во-вторых, как называются таблицы в ней. И как и чем они были созданы. Не из воздуха же возникли.
Насчёт знаков вопросика подозреваю какие-то проблемы с кодировкой.
11.11.2008 в 16:44

ту проблему решил нашел ошибки в коде. Возникла новая!
Вывожу таблицу в цикле но в браузере вместо 3 позиций выводится только первая которая повторяется.
Вобщем проблема с id. При создании таблицы auto_increment поставил на id. Как исправить???



11.11.2008 в 19:03

Sanctus Satanas
— В чём у меня ошибка?
— В ДНК!


Вы же видите, что в цикле do...while у вас значения, возвращаемые функцией mysql_fetch_array() никуда не записываются. Кроме того do...while там, где более уместен просто while — совершенно ни к чему. Перепишите код так:

while ($myrow = mysql_fetch_array($result)){
    echo 'Супер клиент № -'.$myrow['id'].'<br>';
    echo $myrow['name'].'<br>';
    echo $myrow['coment'].'<br>';
    echo $myrow['zakazu'].'<br>';
}

12.11.2008 в 01:04

Да Sanctus вы правы. Но теперь выводятся все позиции кроме первой. Почему первая не выводится? для id стоит значение not
null . auto_increment стоит
12.11.2008 в 01:08

Sanctus Satanas
vali
Потому что вы забыли убрать нафиг вашу строчку $myrow = mysql_fetch_array($result);, которая у вас стояла перед циклом do...while. Она уже не нужна, т.к. уже на первом проходе цикла идёт получение данных.
12.11.2008 в 01:20

Спасибо помогло. Взял учебник по пхп но только недавно читаю.)
12.11.2008 в 12:28

Sanctus Satanas
vali
Я и не сомневался. )
Просто тут дело было в том, что вы сделали цикл с пост-условием. При этом выборка нужных значений и запись в массив (которую вы забыли) происходила в конце цикла, тогда как попытка эти данные использовать у вас возникала сразу — по ходу цикла. Поэтому вы (или тот, кто вам подсказал) написали вызов функции mysql_fetch_array() до цикла вообще — чтобы получить первый элемент. Самое забавное, что проверку, вернул ли первый вызов mysql_fetch_array() хоть что-нибудь, вы не произвели, т.е. если бы результат был пустым, у вас бы всё равно вылезли предупреждения о попытке использования неинициализированных переменных.
В исправленном мной варианте вызов происходит в начале цикла, кроме того запись значений в массив происходит прямо в условии (вы поначалу этого даже и не написали и поэтому выводились данные, записанные в массив до того, как начался цикл). А работает такая конструкция потому, что в циклах или условных операторах само условное выражение приводится к логическому типу и проверяется, не равно ли оно true («истине»). Т.е. логика while ($myrow = mysql_fetch_array($result)) в том, что переменной $myrow присваивается значение, возвращённое функцией mysql_fetch_array(), затем значение уже $myrow приводится к логическому типу (про неявные преобразования типа поищите в учебнике или официальной документации) и сравнивается с true. Если функция вернёт пустой результат, то он же присвоится переменной и после преобразования такой результат будет равен false, а значит цикл выполняться не будет.
20.11.2008 в 17:17

Другая база и опять проблема=()

< ?php $db = mysql_connect ('localhost','Vlad','pass');
mysql_select_db ('php1',$db);
$r = mysql_query ("SELECT title,meta_d,meta_k,text FROM settings WERE page='index'",$db)or die(mysql_error());
while ($myrow = mysql_fetch_array($r));

Выдает:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'page='index'' at line 1
20.11.2008 в 17:19

проблема в мускуле? но непонятно какая?

Расширенная форма

Редактировать

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail