[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Элементарный вопрос
freed-master
корректно ли выглядит эта запись:

PHP
$page mysql_fetch_assoc(mysql_query("SELECT * FROM `table`WHERE `id`='".id."'")) or die(mysql_error());




Спустя 1 час, 54 минуты, 47 секунд (16.10.2009 - 21:41) twin написал(а):
Нет.

Спустя 47 секунд (16.10.2009 - 21:42) sergeiss написал(а):
Если id - это символьная константа, то тогда (ограниченно) корректно smile.gif

Если же это переменная - то тогда надо писать $id. И если это целое число, то тогда его не нужно заключать в кавычки.

Далее. Аргументом для mysql_fetch_assoc должен быть определенный тип переменной - ресурс. А у тебя там будет логическая величина (в случае ошибки).

Спустя 5 минут, 17 секунд (16.10.2009 - 21:47) freed-master написал(а):
id - это опечатка
т.е. лучше всетаки так:
PHP
$page mysql_query("SELECT * FROM `table`WHERE `id`='".$id."'") or die(mysql_error());
$row mysql_fetch_assoc($page);

Спустя 4 минуты, 28 секунд (16.10.2009 - 21:52) twin написал(а):
Запись некорректа потому, что функция mysql_fetch_assoc() принимает аргументом указатель на запрос. А mysql_query() в случае фиаско вернет false. И будет нотис. Дальше я даже смотреть не стал.

Спустя 3 минуты, 46 секунд (16.10.2009 - 21:56) sergeiss написал(а):
Вообще-то, я лично предпочитаю обходиться без этих вот 'или сдохни( но сначала выдай текст ошибки )' biggrin.gif
Я сначала просто пытаюсь выполнить запрос, а потом анализирую результат. И выполняю какие-то действия, если это необходимо. Причина в том, что зачастую необходимо предпринять большее количество действий, чем просто выдать какой-то текст.

twin - а я уже об этом ( mysql_query() в случае фиаско вернет false) говорил чуть ранее wink.gif

Спустя 5 минут, 8 секунд (16.10.2009 - 22:01) freed-master написал(а):
а если я уверен что mysql_query() вернет true?

Спустя 4 минуты, 42 секунды (16.10.2009 - 22:06) sergeiss написал(а):
Цитата (freed-master @ 16.10.2009 - 23:01)
а если я уверен что mysql_query() вернет true?

А тогда зачем писать
Цитата (freed-master @ 16.10.2009 - 20:47)
or die(mysql_error()


???????????????

Тем более, что 100% уверенности быть не может. Мало ли - сервер БД "упал", завис, или еще что-то там произошло. Или ты поменял что-то в запросе, и он уже может не выполниться при каких-то параметрах?
Так что проверка нужна в любом случае. Это как мытье рук перед едой (также, как и после каждого посещения туалета smile.gif). Должно просто войти в привычку.

Спустя 1 минута, 6 секунд (16.10.2009 - 22:07) twin написал(а):
Ну вперед и с песней)). Дело тут не в уверенности, а в стиле программирования. Если ты будешь надеятьсчя на авоcь, то и получишь по лбу граблей.
Писать надо так, что бы небыло от этой грабли мучительно больно. smile.gif

Спустя 44 секунды (16.10.2009 - 22:07) Kuliev написал(а):
Цитата (sergeiss @ 17.10.2009 - 00:06)
Цитата (freed-master @ 16.10.2009 - 23:01)
а если я уверен что mysql_query() вернет true?

А тогда зачем писать
Цитата (freed-master @ 16.10.2009 - 20:47)
or die(mysql_error()


???????????????

Тем более, что 100% уверенности быть не может. Мало ли - сервер БД "упал", завис, или еще что-то там произошло. Или ты поменял что-то в запросе, и он уже может не выполниться при каких-то параметрах?
Так что проверка нужна в любом случае. Это как мытье рук перед едой (также, как и после каждого посещения туалета smile.gif). Должно просто войти в привычку.

+1

Спустя 3 минуты, 4 секунды (16.10.2009 - 22:10) freed-master написал(а):
спасибо за коменты я к этой теме еще вернуь...

Спустя 55 минут, 47 секунд (16.10.2009 - 23:06) Nikitian написал(а):
Привык писать так:
PHP
$result=mysql_query('select * from tables',$link);
if(
$result && mysql_num_rows($result)>0)
while(
$res=mysql_fetch_assoc($result))
{
//тра-та-та
}
В данном случае идёт проверка не только на работоспособность запроса и сервера бд, но и на ожидаемый результат, т.к. от нулевого результата mysql_fetch_* выдают всё-те же нотисы (или даже варнинги - не помню уже). Опять же можно сразу оценить вадилность возвращённых данных: если используете лимит, то mysql_num_rows() надо сравнивать опираясь именно на ожидаемый результат.

Спустя 3 минуты, 6 секунд (16.10.2009 - 23:09) Kuliev написал(а):
Nikitian
Что то как то не оправданно
PHP
if($result && mysql_num_rows($result)>0);

Спустя 2 минуты, 52 секунды (16.10.2009 - 23:12) Nikitian написал(а):
Вполне: если первое условие не выполняется, то второе не проверяется, если выполняется, то второе тоже должно выполняться.
Да, лучше вместо if($result... писать if(is_resource($result)
Но лень.... такова привычка

Спустя 6 минут, 8 секунд (16.10.2009 - 23:18) glock18 написал(а):
Nikitian
Обычно стараюсь не использовать mysql_lib, но, кажется, mysql_fetch_* возвращает false если ничего нет (это тот же самый конец выборки строк). Что касается нотисов, то мне, кажется, тебе запомнилось именно то, что иногда уже после обработки запроса к результату обращаются как к массиву (непустому, есесно) -> вот и вылазят нотисы, о которых ты упомянул. Функции выборки сами по себе не выдают, но могут спровоцировать возникновение ошибок (ошибки второго порядка, вроде как).


Kuliev
Это оправданно. Нельзя сказать, что это нужно всегда, или что без этого никак нельзя жить. Просто это один из способов понять, что ты получил фигу из базы, когда должен был получить что-то типа массива. smile.gif

Спустя 3 минуты, 41 секунда (16.10.2009 - 23:22) sergeiss написал(а):
Цитата (Nikitian @ 17.10.2009 - 00:06)
т.к. от нулевого результата mysql_fetch_* выдают всё-те же нотисы (или даже варнинги - не помню уже)

Нет, там возвращается FALSE, если строк для возврата нету.

Собственно говоря, на этом же и работает цикл
PHP
while( $row=mysql_fetch_assoc(....) )
{
...
}


Как только строк нету (или даже их и не было), то идет выход из цикла. Безо всяких нотисов-варнингов. При условии, что в mysql_fetch_* передан корректный параметр.

PS. И вот так всегда... Пока писал не торопясь - уже ответили, практически то же самое.... mad.gif

Спустя 15 минут, 27 секунд (16.10.2009 - 23:37) Kuliev написал(а):
Цитата (glock18 @ 17.10.2009 - 01:18)
Nikitian
Обычно стараюсь не использовать mysql_lib, но, кажется, mysql_fetch_* возвращает false если ничего нет (это тот же самый конец выборки строк). Что касается нотисов, то мне, кажется, тебе запомнилось именно то, что иногда уже после обработки запроса к результату обращаются как к массиву (непустому, есесно) -> вот и вылазят нотисы, о которых ты упомянул. Функции выборки сами по себе не выдают, но могут спровоцировать возникновение ошибок (ошибки второго порядка, вроде как).


Kuliev
Это оправданно. Нельзя сказать, что это нужно всегда, или что без этого никак нельзя жить. Просто это один из способов понять, что ты получил фигу из базы, когда должен был получить что-то типа массива. smile.gif

вот тут я с тобой маленько не соглашусь

1) если человек лентяй то может использовать такую конструкцию
PHP
$result=mysql_query('select * from tables',$link);
if(
$result && mysql_num_rows($result)>0)
while(
$res=mysql_fetch_assoc($result))
{
//тра-та-та
}

Я не имел ввиду конкретно Nikitian

2) я всегда делаю проверку, если $result вернет ЛОЖЬ то php выдаст ошибку в запросе и покажет сам запрос, выглядит это примерно так ( да ты и сам знаешь как)
PHP
$sql = ("SELECT * FROM `table`"); // сам запрос 
$result mysql_query($sql) or die (mysql_error() ."<br/>"$sql); // ошибка в случаи если вернет ЛОЖЬ 

if (mysql_num_rows($result) > 0)  // Запрос вернул хоть одну строку

Спустя 9 минут, 46 секунд (16.10.2009 - 23:47) glock18 написал(а):
Цитата
2) я всегда делаю проверку, если $result вернет ЛОЖЬ то php выдаст ошибку в запросе и покажет сам запрос, выглядит это примерно так ( да ты и сам знаешь как)

тут разговор не о false, а о пустом результате запроса.

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

А конкретно по тому, как выполнять эти проверки - это дело каждого. Вариантов тут предостаточно.

Спустя 9 минут, 9 секунд (16.10.2009 - 23:56) Kuliev написал(а):
glock18
Ну вот смотри
PHP
if($result && mysql_num_rows($result)>0)


Если в запросе будет ошибка то по логике скрипта на экране будет нечто вроде
В базе данных нет записей

При этом о том что произошла ошибка в запросе он не напишет, вот потом разберись что к чему!

Спустя 1 час, 40 минут, 35 секунд (17.10.2009 - 01:37) Nikitian написал(а):
Блин, вспомнил почему я так именно пишу. На интуитивном уровне так, что уже и не осознаю. Так сказать, паттерны в мозгу, котрые пишу на автомате (: Короче, нам глубоко плевать: вернул ли запрос что-либо, или он отвалился с ошибкой. Ошибка в любом случае враппером будет записана в лог, но пользователю-то что-то надо выводить. Писать: "Извините, но ваши действия привели к ошибке," - это бред и так делать на продакшне нельзя. Поэтому либо выводим что есть, либо пишем, что ничего не нашлось по запросу/раздел пуст/страница закрыта или не существует.

Спустя 7 часов, 43 минуты, 26 секунд (17.10.2009 - 09:20) Crэker написал(а):
Цитата (freed-master @ 16.10.2009 - 19:47)
id - это опечатка
т.е. лучше всетаки так:
PHP
$page = mysql_query("SELECT * FROM `table`WHERE `id`='".$id."'") or die(mysql_error());
$row = mysql_fetch_assoc($page);

PHP
$page mysql_query("SELECT * FROM `table`WHERE `id`='$id' ") or die(mysql_error());
$row mysql_fetch_assoc($page);

это так делается, не надо кучу лишних кавычек


_____________
Всем, кто заинтересован, могу помочь начать зарабатывать на forex.
Пишите в личку или на e-mail: flash-dirt@yandex.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.