Welcome to PHPClub
В эти выходные на LinuxFest v.12! Поляна от PHPClubа Мастер-классы по Javascript, AJAX/COMET, jQuery!
Боишься нашего дизайна?
поиск:
   
 Начало | Настройки | Расширенный поиск | РегистрацияПосмотреть новые сообщения 
  
PHP Club форумы: > Вопросы по программированию на РНР > Вопросы по теории программирования > Farewell наглядным запросам.
Страниц (6): [1] 2 3 4 » | ... Последняя »  

Автор
Тема ОТВЕТИТЬ
Фанат
oncle terrible

На форуме с: Jul 2003
Cообщений: 33516
Город: Broomfield, United States
Farewell наглядным запросам.

Классическим способом составления запроса является просто написать его в строку, вставляя в нужных местах переменные.
$query="SELECT * FROM table WHERE id='$id'";
Весьма наглядный, читабельный и приятный способ.

Однако, перед нами стоит проблема SQL-injection, с которой провайдеры борются повальным выставлением волшебных кавычек. Но и здесь не все гладко.

Во-первых, товарищ Wicked ткнул меня носом в сибейзовые кавычки. И теоретические, весьма теоретические проблемы с ними. Но проблемы. Весьма, теоретические, и гипотетические. Малореальные. Но теоретически возможные.

Во-вторых, мы имеем тот факт, что волшебные кавычки нам квотят только внешние переменные. А запросу-то все равно - прослешены должны быть любые.

Отсюда делается очевидный вывод.
Для того, чобы избежать любых проблем с данными, надо
1. избавляться от волшебных кавычек и их последствий.
по возможности вырубать magic_quotes_gpc, при невозиможности - очищать переменные в самом начале.
2. Квотить данные перед непосредственно перед помещением в запрос.

Отсюда делается грустный вывод.
Что, таки - да.
Say bye-bye to красивый и наглядный запрос
$query="SELECT * FROM table WHERE id='$id'";
Добро пожаловать программы для составления запросов, плейсхолдеры и прочая машинерия...

Old Post 05.01.05 20:38 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
fixxxer
Старожил PHPCluba

На форуме с: May 2003
Cообщений: 3884
Город: Moscow, Russia

если уж очень хочется, можно реализовать корректно работающую функцию
типа
$query = setQuery('SELECT * FROM table WHERE id=$id')
но меня честно говоря не очень-то парит необходимость использования addslashes

Old Post 05.01.05 21:23 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
SiMM
Старожил PHPCluba

На форуме с: Jan 2004
Cообщений: 6390
Город: Чебоксары, Россия

 
Автор оригинала: fixxxer
если уж очень хочется, можно реализовать корректно работающую функцию
типа
$query = setQuery('SELECT * FROM table WHERE id=$id')

Имхо, вообще не катит - парсить что-ли будете запрос?
 
но меня честно говоря не очень-то парит необходимость использования addslashes

Так нельзя её пользовать. В свете недавних событий
http://phpclub.ru/talk/showthread.p...;threadid=60587

Old Post 05.01.05 21:36 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
si
Administrator

На форуме с: Jan 2000
Cообщений: 1769
Город: Tallinn, Estonia

 
но меня честно говоря не очень-то парит необходимость использования addslashes


странно и страшно слышать это от вас товарищь

Old Post 05.01.05 21:40 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
ONK
Пассивист PHPСluba

На форуме с: Nov 2002
Cообщений: 562
Город: Saint Petersburg, Russia

а чем собственно не нравятся вот такие запросы:

function my_esc($string){
return mysql_escape_string($string);
}

$query="SELECT * FROM table WHERE id='".my_esc($id)."'";

Они ничуть не теряют читабильность, а скорее наоборот приобретают её.

Old Post 05.01.05 21:46 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Frol
Санитар PHPClubа

На форуме с: Aug 2002
Cообщений: 1454
Город: Espoo, Finland

ИМХО плэйсхолдеры a la PEAR -- самое удобное

$res 
$db->query('SELECT * FROM table WHERE field = ? AND field2 = ?', array($var$var2));

Old Post 05.01.05 21:54 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
ONK
Пассивист PHPСluba

На форуме с: Nov 2002
Cообщений: 562
Город: Saint Petersburg, Russia

Frol, это хорошая практика, но согласись, в читабильности сильно проигрывает, а по надёжности равноценно.

Old Post 05.01.05 21:59 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Фанат
oncle terrible

На форуме с: Jul 2003
Cообщений: 33516
Город: Broomfield, United States

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

Old Post 05.01.05 22:02 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
ONK
Пассивист PHPСluba

На форуме с: Nov 2002
Cообщений: 562
Город: Saint Petersburg, Russia

У меня есть таблицы по 50 - 60 столбцов. Я предпочитаю писать такие SQL запросы "в столбик".

Но опять же признаю, что плейсхолдеры - это хорошая практика.

Old Post 05.01.05 22:07 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Frol
Санитар PHPClubа

На форуме с: Aug 2002
Cообщений: 1454
Город: Espoo, Finland

ONK
в читабельности выигрывает, так как видим запрос в нормальном виде.
не заставляет писать постоянно "my_escape".

Old Post 05.01.05 22:12 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
ONK
Пассивист PHPСluba

На форуме с: Nov 2002
Cообщений: 562
Город: Saint Petersburg, Russia

уговорил.

Old Post 05.01.05 22:29 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
fixxxer
Старожил PHPCluba

На форуме с: May 2003
Cообщений: 3884
Город: Moscow, Russia

а кто сказал, что я не использую плейсхолдеры в виде PEAR?
в крупных проектах - да, я так и делаю, у меня есть довольно громоздкий класс для работы с БД.
в мелких скриптах - проще "по факу" - зачем вместе со скриптов в 50 строчек таскать 10 здоровущих инклюдников?

Old Post 05.01.05 23:01 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Frol
Санитар PHPClubа

На форуме с: Aug 2002
Cообщений: 1454
Город: Espoo, Finland

fixxxer
заметь, в большинстве случаев это таскание заметно экономит время.

Old Post 05.01.05 23:16 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
fixxxer
Старожил PHPCluba

На форуме с: May 2003
Cообщений: 3884
Город: Moscow, Russia

экономит, да.
но часто это слишком неоправданное раздувание объема.

Old Post 06.01.05 02:37 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Bred Vilchec
Продвинутый новичок

На форуме с: May 2004
Cообщений: 129
Город: Novosibirsk, Russia

Думаю, можно без особых трудов решить проблему кавычек/слэшей раз и навсегда.
Допустим, в скриптах есть инсталяшка (если её нет или функции типа ini_get недоступны,
придется вручную сделать). При установке инстал-скрипт проверяет через ini_get, включены ли magic_quotes_gpc, magic_quotes_sybase и прочая дрянь.
Создает какой-нибудь config.php, где прописывает полученные результаты, например,

"$is_magic_quotes_gps=1";
"$is_magic_quotes_sybase=0";

Для слеширования создана отдельная функция
(она может заодно и плейсхолдеры обрабатывать),
которая зная эти данные(конфиг инклудится), прослеширует
переменные как надо.
Должно получиться без томозов и гемора. Как считаете?


__________________
Практикую мануальную терапию.

Old Post 06.01.05 03:46 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
SiMM
Старожил PHPCluba

На форуме с: Jan 2004
Cообщений: 6390
Город: Чебоксары, Россия

Bred Vilchec, ну и не проще ли прописать то, что надо в .htaccess'е, + в скрипте "убрать" всё лишнее и сделать нужные ini_set'ы, абсолютно не завися от причуд хостера?

Old Post 06.01.05 07:05 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
ONK
Пассивист PHPСluba

На форуме с: Nov 2002
Cообщений: 562
Город: Saint Petersburg, Russia

Bred Vilchec, то что ты описал это плохой подход к решению проблемы.

Old Post 06.01.05 08:10 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Bred Vilchec
Продвинутый новичок

На форуме с: May 2004
Cообщений: 129
Город: Novosibirsk, Russia

SiMM
ИМХО нет, не проще. Если бы все так просто было, зачем этот топик? Не всегда возможно вмешаться в настройки хостера, тем более что они могут изменяться. Тот же htaccess не везде создать можно... уже не говоря про ini_set() - это медленно и ненадежно, к тому же, хостер вообще может выключить эту функцию или просто восстанавливать те значения, которые захочет. Я постарался использовать минимум зависящих от хостера обстоятельств.

ONK
Возможно, Вы правы, но чем этот способ так плох? Он просто избавляет програмера от проблемы слеширования, причем делает это максимально надежно и быстро. (если конечно, я не ошибаюсь)

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


__________________
Практикую мануальную терапию.

Old Post 06.01.05 14:01 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Screjet
Помощник санитара PHPCluba

На форуме с: Mar 2003
Cообщений: 813
Город: Odesa, Ukraine

Bred Vilchec, не все хостеры полные идиоты. Точнее большинство не идиоты и понимают необходимости клиентов.

Твой способ, скажем, эффективен на бесплатных/очень дешевых хостингах. Но само понятие "бесплатных/очень дешевых" говорит само за себя. Соотвественно и скрипты там должны быть такие. Никто не будет совать сайт, скажем, стоимостью хотяб 2к на бесплатный хостинг.

Old Post 06.01.05 14:39 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
ONK
Пассивист PHPСluba

На форуме с: Nov 2002
Cообщений: 562
Город: Saint Petersburg, Russia

Bred Vilchec, плох тем, что сохраняет полную зависимость от настроек в php.ini

Old Post 06.01.05 14:52 URL сообщения | инфо об авторе | жалоба | IP: Записан | редактировать | ОТВЕТИТЬ и ЦИТИРОВАТЬ
Время GMT. Текущее время 23:27. Подписаться на Тему | Версия для Печати
Страниц (6): [1] 2 3 4 » | ... Последняя »  

PHP Club форумы: > Вопросы по программированию на РНР > Вопросы по теории программирования > Farewell наглядным запросам.
 
Оценить:
 
 
 
 

 © 1997-2010 PHPClubTeam      

Powered by vBulletin Copyright © 2000-2010 Jelsoft Enterprises Limited.