Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Неожиданная ошибка

Сообщения:  [1-10]   [11-13] 

 
 автор: Habl   (23.08.2013 в 12:48)   письмо автору
 
   для: confirm   (23.08.2013 в 12:46)
 

ясно, спасибо что все растолковали, если что обращусь к вам

  Ответить  
 
 автор: confirm   (23.08.2013 в 12:46)   письмо автору
 
   для: Habl   (23.08.2013 в 12:40)
 

<?
$q 
mysql_query(...);
if(
mysql_num_rows($q)) {
   while(
$row mysql_fetch_assoc($q)) {
       
//гарантированный вывод всех рядов полученных запросом
   
}
}

Что еще объяснить, если вы до цикла дважды сместили указатель? Функция mysql_fetch_assoc, как и другие функции получения ряда автоматически смещают указатель ресурса, то есть действие наподобие foreach(). Это и есть причина.

  Ответить  
 
 автор: Habl   (23.08.2013 в 12:40)   письмо автору
 
   для: confirm   (23.08.2013 в 12:37)
 

Хорошо, понял что вот из-за этого у меня не выводилась одна строка из базы
if (mysql_fetch_row($result) > 0) {

}
Что то еще мешает выводу еще одной строки

Думаю можно заменить этим mysql_ num_ rows

  Ответить  
 
 автор: confirm   (23.08.2013 в 12:37)   письмо автору
 
   для: Habl   (23.08.2013 в 12:28)
 

У вас и до этого есть смещение указателя, сразу после второго запроса у вас - $myrow = mysql_fetch_array($result);, 100% пустое действие, так как далее до второго бесполезного if (mysql_fetch_row($result) > 0) вы не используете $myrow.

Число строк в ресурсе возвращенном запросом получает функция http://www.php.net/manual/ru/function.mysql-num-rows.php

$myrow[text] - это не ошибка, но писать так не стоит, и об этом предупреждают разработчики. Просто в данном случае РНР выполнит бесполезное действие - будет искать такую константу, и не найдя ее, поймет, что вы ошиблись, а значит это строковое значение, то есть $myrow['text']. Это не страшно, лишь впустую потраченное время, но если разработчик зарезервирует это имя, тогда труба - вы не получите ожидаемого.

  Ответить  
 
 автор: Habl   (23.08.2013 в 12:28)   письмо автору
 
   для: confirm   (23.08.2013 в 11:49)
 

Хорошо, понял что вот из-за этого у меня не выводилась одна строка из базы
if (mysql_fetch_row($result) > 0) {

}
Что то еще мешает выводу еще одной строки

  Ответить  
 
 автор: confirm   (23.08.2013 в 12:26)   письмо автору
 
   для: Habl   (23.08.2013 в 12:13)
 

Вы читали внимательно? Видимо нет, ибо все эти три функции возвращают ряд результата запроса в виде массива, а ни как не число строк который вернул запрос. Кроме этого mysql_fetch_array возвращает либо ассоциативный массив, либо численный массив или оба вместе. Вы используя эту функцию без второго аргумента получаете два одинаковых набора данных, один представленный ассоциативным массивом, другой индексным. А работаете вы в дальнейшем с ассоциативными данными. Спрашивается, а зачем вы тянете лишнее?

Вы своим условием фактически проверяете if(Array) - то есть пустой массив или нет. Дугой информации любая из этих функций вам не вернет, так как, ни mysql_fetch_row ни две другие не возвращают количество строк в результата запроса. А есть ли такая функция? Если прочесть анонсы функций - http://www.php.net/manual/ru/ref.mysql.php, можно ли среди них найти то, что нужно?

  Ответить  
 
 автор: Habl   (23.08.2013 в 12:13)   письмо автору
 
   для: confirm   (23.08.2013 в 11:49)
 

mysql_fetch_row проверяю есть ли в базе строки, если нет то в каталоге на сайте вывожу сообщение, что товаров в данной категории нет

  Ответить  
 
 автор: confirm   (23.08.2013 в 11:49)   письмо автору
 
   для: Habl   (23.08.2013 в 11:46)
 

Читайте:
http://www.php.net/manual/ru/function.mysql-fetch-array.php - и обратите внимание что эта функция возвращает.
http://www.php.net/manual/ru/function.mysql-fetch-assoc.php
http://www.php.net/manual/ru/function.mysql-fetch-row.php

Только читать внимательно. Прочли? Теперь объясните, что данным условием вы пытаетесь выяснить?

  Ответить  
 
 автор: Habl   (23.08.2013 в 11:46)   письмо автору
 
   для: confirm   (23.08.2013 в 11:39)
 

оооу это ошибочка!
mysql_fetch_row там было, ошибся, но mysql_fetch_row тоже не работает...

  Ответить  
 
 автор: confirm   (23.08.2013 в 11:39)   письмо автору
 
   для: Habl   (23.08.2013 в 11:24)
 

Мне неизвестно что вам надо вывести, но ваш единственный запрос возвращает также единственный ресурс, в котором вы смещаете указатель до цикла дважды. Думайте, ваши данные, вам виднее. Например, это что вы хотите узнать mysql_fetch_array($result) > 0 ? Можете объяснить?

http://www.php.net/manual/ru/security.database.sql-injection.php

  Ответить  

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования