[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SQL запросы
NierRa
Добрый день уважаемые форумчане!

Сегодня от меня следующий вопрос. В учебных материалах я встретил два варианта оформления SQL запросов:

$sql = "SELECT `name` FROM `list`";
$query = mysql_query($sql) or die(mysql_error());
и
$query = ("SELECT `name` FROM `list`") or die(mysql_error());


Автор первого запроса склонялся к тому, что можно легко проверить запрос на предмет ошибок подстановки принятых данных конструкцией
echo $sql;


Автор второго запроса склонялся к тому, что код сокращается на несколько строк

Хотелось бы услышать Ваш совет по этому поводу.

И второй вопрос:

На одном форуме читал, что лучше составлять свои запросы так, чтобы всегда использовался LEFT JOIN. Автор советовал меньше использовать RIGHT JOIN из-за худшего восприятия кода.
Хотелось бы услышать Ваше мнение и по данному вопросу
Благодарю.

_____________
Задача на корректную обработку данных (мое решение)
http://eu.battle.net/sc2/ru/profile/2212951/1/IIIIIIIIIIII/
m4a1fox
NierRa
Вот это
 or die(mysql_error());

И так проверит на ошибки. Так что не принципиально. Лично предпочитаю. если брать MYSQL то такой

$query = ("SELECT `name` FROM `list`") or die(mysql_error());

вариант.
Ramzes_Ra
я тоже форумчанин, и тоже могу ответить?)
и вообще у меня встречный вопрос будет.... вот я всегда запросы делаю двумя способами
$query = "SELECT * FROM `table`";
$sql = mysql_query($query);
$myrow = mysql_fetch_assoc($sql);

$result = mysql_query("SELECT * FROM `table`");
$myrow= mysql_fetch_assoc($result);

я никогда не заморачиваюсь по поводу mysql_error, так как у меня стоит НЕ ПОКАЗЫВАТЬ ошибки в браузере при их возникновении.
Код прекрасно работает - поэтому меня не волнует, есть ошибки или нет.

Правильно ли я думаю?
m4a1fox
Ramzes_Ra
Да как угодно. Если вам нравится ходить в порванных носках (их же все равно ни кто не увидит - они в туфлях), то ваше право. Лично мне приятно ходить в целых.
NierRa
Цитата
И так проверит на ошибки.

Верно, но вот допустим пример:

Цитата
$a = //какие-то данные, полученные в результате работы функции или нескольких функций

$query = mysql_query("SELECT `name` FROM $a") or die(mysql_error());


если у нас данные, полученные в переменной $a будут не верными, то мы получим ошибку такого типа
Цитата
Unknown column 'self' in 'field list'

Соответственно, мы точно не знаем какая переменная не с теми данными, которые мы ожидаем (предположим запрос куда более сложнее, чем на примере).
В первом варианте можно достаточно просто отследить все данные, попавшие в запрос. Используя echo $sql; - мы получим:
Цитата
SELECT self FROM `heroes`


Ramzes_Ra

Я делаю так:

Цитата
define('DB_DISPLAY_ERRORS', TRUE);

function db_connect_error () {
    if(defined('DB_DISPLAY_ERRORS')) {
        die(mysql_error());
    }
    else {
        die('Какой-то текст, типа привет пользователь, вот тебе ошибка');
    }
}

$connect = mysql_connect(DB_HOST, DB_LOGIN, DB_PASS) or call_user_func('db_connect_error');
mysql_select_db (DB_BASE, $connect) or call_user_func('db_connect_error');


... ну и так далее со всеми запросами mysql_query.

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

Цитата
Правильно ли я думаю?

Я думаю не правильно, так как отслеживать ошибки всегда нужно. Это экономит время, когда вы будете делать сложные проекты

Upd. Почему то форматирование посыпалось после редактирования, оформлю код цитатами

_____________
Задача на корректную обработку данных (мое решение)
http://eu.battle.net/sc2/ru/profile/2212951/1/IIIIIIIIIIII/
sergeiss
Я лично считаю вот это
Цитата (NierRa @ 1.09.2012 - 00:31)
or die(mysql_error());

полным непрофессионализмом (это мягкий вариант замены слова "дебилизм") wink.gif Причина простая: если возникла ошибка, то скрипт не должен тут же "умереть", он должен обработать данные и, возможно, скорректировать их. В частности, выдать запрос юзеру на корректировку данных. А простое сообщение в браузере о том, что "у вас всё хреново, у вас тут есть ошибка" я считаю некорретным.

Из указанных в начале 2-х вариантов я предпочитаю первый, т.е. сначала составляю запрос, а потом его запускаю. Одна из причин в том, что у меня запросы (чаще всего) многострочные. И, чаще всего, я их не просто пишу, а собираю по частям в зависимости от ряда условий и параметров.

PS. Вот, нашел тему с этого сайта http://phpforum.ru/index.php?showtopic=50424&hl= с реально БОЛЬШИМИ запросами wink.gif Которые лучше сначала записать в переменную, а потом передавать на обработку. Потому что запросы (в моем случае уж точно) каждый раз формируются заново, с какими-то новыми параметрами.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Лена
NierRa
На практике RIGHT JOIN встречается редко. Легче через LEFT JOIN увидеть, какие записи есть в первой (левой) таблице, а каких нет во второй (правой).

or die(mysql_error()); я никогда не использую. Мне проще глазами увидеть весь запрос и найти ошибку. И если есть ошибки в запросе, но он как-то работает, когда-нибудь сбой все равно будет. А значит такая работа некачественная.



Ramzes_Ra
Ошибки все равно могут идти в логи сервера. И размер логов тогда будет съедать много места на сервере. Будете долго искать, почему вроде как проект мало весит, а места на сервере уже нет.
NierRa
sergeiss
Согласен с вами, я только хотел сказать, что можно сделать "переключатель" ошибок. Т.е если вы работаете над кодом, включили отображение, если не работаете - выключили.
А что находится внутри конструкции if-else отдельный вопрос.
В целом за совет спасибо, я далеко не профессионал - а только лишь плотно учусь второй месяц

Лена
Благодарю.

_____________
Задача на корректную обработку данных (мое решение)
http://eu.battle.net/sc2/ru/profile/2212951/1/IIIIIIIIIIII/
Быстрый ответ:

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