Следующим шагом после установки соединения, является выполнение запроса(ов). Как показано в предыдущем примере, запрос обычно выполняется с помощью методов prepare() и execute() интерфейса DBI.
Листинг 20.12.
my $sth = $dbh->prepare("SELECT * FROM books"); $sth->execute();
Метод prepare(), принимающий в качестве параметра SQL-запрос, подготавливает запрос для выполнения, но сам его не выполняет. Вместо этого метод prepare() возвращает дескриптор готового к выполнению запроса, который сохраняется, а затем передается методу execute() на выполнение. Заметим, что строка запроса, передаваемая методу prepare() , не должна завершаться точкой с запятой, как это обычно делается при работе с обычным клиентом, работающим с командной строкой.
Дескриптор оператора, возвращенный методом prepare() , позволяет воспользоваться большим количеством методов выборки данных из результирующих наборов, возвращенных после выполнения запроса (об этом подробнее в следующем разделе). По этой причине комбинация методов prepare() - execute() чаще всего используется в контексте запросов типа "SELECT". Однако для запросов другого типа справочник по Perl рекомендует использовать альтернативный метод - метод do() который берет на себя выполнение двуединой задачи: подготовки и выполнения оператора за один прием.
Взгляд со стороны
С помощью Perl всегда есть возможность сделать одну и ту же операцию разными способами, что справедливо и в случае с MySQL. Довольно часто можно найти более эффективный способ решения определенной задачи, творчески используя более совершенные операции SQL. Сочетание методов prepare() и execute() является одним из них: если логика разрабатываемого приложения требует обработки в цикле практически одного и того же цикла, это можно сделать значительно более эффективно с применением временных таблиц и оператора UPDATE одновременно для нескольких таблиц. Например, вместо многократного использования оператора UPDATE t1 SET m=? WHERE n=? в одном цикле, можно создать временную таблицу, занести туда новые значения из каждой строки в t1 с помощью многострочного оператора INSERT, а затем обновить t1 с помощью многотабличного оператора UPDATE.
Рассмотрим следующий пример, демонстрирующий использование метода do() в контексте работы с запросом UPDATE.
Листинг 20.13.
#!/usr/bin/perl
# загрузить модуль use DBI();
# соединить
my $dbh = DBI->connect("DBI:mysql:database=somedb;host=localhost", "user", "pass");
# выполнить запрос
my grows = $dbh->do("UPDATE books SET title='Mystic River' WHERE author='Dennis Lehane'");
# очистить $dbh->disconnect();
Использование метода do() для таких операторов SQL, как CREATE и DROP, имеет больше смысла, чем применение трудоемких методов prepare() и execute() . Однако, если вам требуется выполнять раз за разом один и тот же оператор, сочетание методов prepare() и execute() более эффективно.
Кроме того, метод do() не может быть использован с операторами SELECT вследствие того, что дескриптор оператора может потребоваться для выборки данных впоследствии. Оператор do() возвращает только количество обработанных строк (или значение undef в случае ошибки), делая невозможным их использование при выполнении операций такого операторами типа SELECT.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Выполнение запросов
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Управление соединением. Продолжение. | Все о MySQL. Использование маркеров DBI-интерфейса |