Perl для системного администрирования



         

Использование DBI - часть 2


Для использования второго метода необходимо сначала подготовить оператор SQL (с помощью команды оч-иге), а затем выполнить (execute) его на сервере.

Команда рrераrе() возвращает нечто новое, чего мы раньше никогда не встречали: дескриптор команды. Так же, как дескриптор базы данных ссылается на открытое соединение с базой данных, дескриптор команды ссылается на конкретный SQL-оператор, который был подготовлен с помощью р"есагс(). Получив дескриптор команды, можно использовать exucir.u для отправки запроса на сервер. Позже подобный дескриптор команды будет применяться для получения результатов запроса.

Вероятно, вас удивляет, зачем сначала подготавливать оператор, вместо того чтобы напрямую выполнить его. Подобная операция позволяет драйверу DBD (или, что более вероятно, вызываемой библиотеке) выполнить синтаксический разбор SQL-запроса. После того как оператор подготовлен, можно повторно выполнить его через дескриптор команды, не проводя больше синтаксический анализ. Зачастую это основной фактор повышения эффективности. В действительности, DBI-метод do(), используемый по умолчанию, для каждой выполняемой команды применяет сначала рrераrе(), а затем execute().

Как и вызов do, рассмотренный ранее, метод execute() возвращает количество обработанных записей. Если результатом запроса является ноль записей, возвращается строка ОЕО, эта строка при логической проверке воспримется как «истина». Если драйверу неизвестно, сколько записей было обработано, возвращается -1.

Перед тем как перейти к ODBC, стоит упомянуть еще об одной особенности prepared), поддерживаемой большинством DBD-модулей, а именно о заполнителях (placeholders). Заполнители, также называемые позиционными маркерами, позволяют подготовить команду с оставленными в ней «дырами», в которые можно внести значения во время выполнения команды (executeO). Подобное свойство помогает конструировать запросы на лету, не затрачивая лишнего времени на их синтаксический разбор. Знак вопроса используется как заполнитель для одного скалярного значения. Вот пример кода на Perl, демонстрирующий такое применение заполнителей:




Содержание  Назад  Вперед