Квотирование данных MySQL запроса в PHP по сравнению с Perl
От: DmitryZhariy Украина http://zhariy.org.ua
Дата: 01.05.07 19:48
Оценка:
Бегло просмотрев справочник функций по работе с MySQL в PHP, я не обнаружил действительно удобного способа квотирования специальных символов (кавычек, обрывов строк и т.д. ) в PHP.
Я нашел функцию
string mysql_real_escape_string (string unescaped_string [, resource link_identifier])

Но, на мой взгляд ее использование при большом количестве входных данных не очень удобно.
Хотелось бы привести пример скрипта на Перл, к котором есть более удобный, на мой взгляд, способ решения этой проблемы и спросить у форумчан: есть ли подобная возможность квотирования в языке php:

Perl код:
use strict;
use DBI;

my $dbh = DBI->connect('DBI:mysql:database_name:localhost','user', 'password');
my $external_item1 = 10;
my $external_item2 = 20;
my $external_item3 = '"Hello';

# Создаем запрос. Знаки вопроса означают, что на их место будут вставленны 
# данные при выполнении функции execute
my $sth = $dbh->preare("SELECT * FROM table_name 
                        WHERE id    = ? 
                        AND   value = ?
                        AND   name  = ? ");

# А эта функция вставляет данные на место знаков вопроссов, 
# автоматически квотируя их
# Т.е. вместо первого знака вопроса вставится квотированное значение 
# $external_item1 ... вместо 3-го - $external_item3
$sth->execute($external_item1, $external_item2, $external_item3);

while (my @array = $sth->fetchrow_array()) {
    print "Получен новый столбец!\n";
}
Re: Квотирование данных MySQL запроса в PHP по сравнению с P
От: Дм.Григорьев  
Дата: 01.05.07 21:09
Оценка:
Здравствуйте, DmitryZhariy,

Используй PHP-модуль mysqli вместо mysql (поддерживает сервера MySQL4.1 и выше; вопрос только в том, есть ли этот модуль у хостеров). Там есть функции mysqli_stmt_init(), mysqli_stmt_prepare(), mysqli_stmt_bind_param(). Выглядит жутковато, но удобный враппер написать несложно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[2]: Квотирование данных MySQL запроса в PHP по сравнению
От: Mamut Швеция http://dmitriid.com
Дата: 02.05.07 07:46
Оценка:
ДГ>Здравствуйте, DmitryZhariy,

ДГ>Используй PHP-модуль mysqli вместо mysql (поддерживает сервера MySQL4.1 и выше; вопрос только в том, есть ли этот модуль у хостеров). Там есть функции mysqli_stmt_init(), mysqli_stmt_prepare(), mysqli_stmt_bind_param(). Выглядит жутковато, но удобный враппер написать несложно.


Можно также использовать уже существующие врапперы типа PEAR::MDB2, AdoDb, которые предоставляют возможность подготовки запросов


dmitriid.comGitHubLinkedIn
Re[3]: Квотирование данных MySQL запроса в PHP по сравнению
От: DmitryZhariy Украина http://zhariy.org.ua
Дата: 02.05.07 10:44
Оценка:
To Дм.Григорьев
[quote]
Используй PHP-модуль mysqli вместо mysql (поддерживает сервера MySQL4.1 и выше; вопрос только в том, есть ли этот модуль у хостеров).
[/quote]
Спасибо. Если функции типа prepare() поддерживаются на уровне екстеншена – то это очень хорошо, так как екстеншен – это бинарник, и, возможно будет работать быстрее скриптового аналога. Но, вот возможность отсутствия екстеншена у хостера несколько останавливает в написании чего-либо с его использованием.

To Mamut
[quote]
Можно также использовать уже существующие врапперы типа PEAR::MDB2, AdoDb, которые предоставляют возможность подготовки запросов
[/quote]

Спасибо. Побежал разбираться с этими модулями.
Re[4]: Квотирование данных MySQL запроса в PHP по сравнению
От: cadet354 Россия
Дата: 03.05.07 07:08
Оценка: 3 (1)
Здравствуйте, DmitryZhariy, Вы писали:


DZ>Спасибо. Побежал разбираться с этими модулями.


если тебе нравится placeholder,
посмотри в эту сторону DbSimple
Re: Квотирование данных MySQL запроса в PHP по сравнению с P
От: kost-BebiX Украина http://fedorastones.blogspot.com
Дата: 03.05.07 07:41
Оценка: 2 (1)
Ну вот как, допустим, сделали zend'овцы:
http://framework.zend.com/manual/ru/zend.db.html
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Если программист в рабочее время играет, значит —
либо у него мало работы и большая зарплата,
либо у него много работы и маленькая зарплата.
Re[5]: Квотирование данных MySQL запроса в PHP по сравнению
От: Аноним  
Дата: 03.05.07 09:14
Оценка:
C>если тебе нравится placeholder,
C>посмотри в эту сторону DbSimple

А DbSimple довольно удобная и понятная библиотека.
Функция:
$rows = $DB->selectPage(
    $totalNumberOfUsers,
    'SELECT * FROM ?_user LIMIT ?d, ?d',
    $pageOffset, $numUsersOnPage
);


Похожа по действию на оператор формат. вывода printf, что делает ее довольно гибкой.

Зендовский способ использования плейсхолдеров также очень не плох.
Но, подход DbSimple, с возможностью указания формата плейсхолдеров мне кажется лучше и гибче.
Re[6]: Квотирование данных MySQL запроса в PHP по сравнению
От: DmitryZhariy Украина http://zhariy.org.ua
Дата: 03.05.07 09:24
Оценка:
Предыдущий пост (Аноним 572) — мой


Даже подстановка масивов в ДбСимпл выглядит намного гибче Зендовского варианта.
$rows = $DB->select('
        SELECT * FROM user
        WHERE 
            1=0 
          { OR user_id IN(?a) }
    ',
    $listOfUserIdsMayBeEmpty
    // Если пусто, разворачивается в 1=0, т.е. false.
);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.