|
Программирование >> Создание клиентов mysql
После инсталляции модуля DBIи драйвера MySQL подключение к серверу осуществляется с помощью одного-единственного метода: connect () (листинг 20.1). Он возвращает дескриптор базы данных. Первый аргумент метода определяет источник данных. Компоненты этойстроки разделяютсядвоеточиями. Первый компонент всегда равен DBI . Второй компонент идентифицирует драйвер, в данном случае mysql . Третий компонент - это имябазы данных. Дополнительно можно указать адрес узла и порт. Остальные два аргумента метода connect () задают имя пользователя и порт. По окончании сеанса необходимо вызвать метод disconnect (). #!/usr/bin/perl # Подключение модуля DBI. use DBI; I Подключение к базе данных. $dbh = DBI->connect(DBI:mysql:test, leon, pass); # Отключение. $dbh->disconnect; Извлечение данных После подключения к серверу баз данных можно посылать ему запросы с помощью методов prepare () и execute (). Первый из них подготавливает инструкцию к выполнению и возвращает ее дескриптор. Второй метод передает инструкцию серверу и просит его подготовить результаты запроса. Рассмотрим пример, показанный в листинге 20.2. Этот сценарий извлекает записи из таблицы user и отображает их на экране. Обратите внимание на то, что сценарий пытается подключиться к серверу от имени пользователя root с явно неправильным паролем. Если будете экспериментировать со сценарием, подставьте корректные зна-ченияимени пользователя ипароля. #!/usr/bin/perl # Подключение модуля DBI. use DBI; § Подключение к базе данных. ту $dbh = DBI->connect( DBI:mysql:test:localhost , root, pass); tt Подготовка запроса. my $query = SELECT User, Host FROM user ORDER BY 1,2 ; my $sth = $dbh->prepare ($query) or die Can t prepare $ query: . $dbh->errstr . \n ; Изменение данных 411 # Выполнение запроса. $sth->execute or di nt execute Squery . $dbh->errstr . i Извлечение записей, my $row; while(@row = $sth->fetchrow array) { my $i; for $i (0.. {$sth->{NUM OF FIELDS}-l} ) { prin $row[$i] . ] ; print( \n ); \n ; i Удаление инструкции. $sth->finish; ttОтключение. $dbh->disconnect; В этом примере ведется тщательный контроль ошибок. Многие ункции в случае ошибки возвращают нуль. Ветвь or die интерпретируется только тогда, когда первая часть конструкции равна нулю. Обратите внимание на сообщение об ошибке, в котором указывается, какой запрос потерпел неудачу, и приводится сообщение, полученное от драйвера. Метод возвращает массив значений столбцов, индексация торых начинается с нуля. Данный сценарий достаточно универсален и позволяет обрабатывать результаты произвольной инструкции SELECT. He делается никаких предположений том, сколько столбцов имеется в таблице результатов запроса. Это значение определяется с помощью свойства NUM OF FIELDS объекта инструкции. Метод fetchrow array () возвращает следующую запись из набора, пока не будет достигнут конец таблицы. В конце сценария вызывается мето Msh(), который освобождает память, занимаемую инструкцией. Изменение данных Если требуется выполнить инструкцию, которая не возвращает набор записей (например, CREATE STATEMENT), воспользуйтесь методом do {) объекта базы данных. Этот метод возвращает число измененных записей. Для запросов, которые выполнились успешно, но не меняли никаких записей, возвращается специальное значение Представленный ниже сценарий создает таблицу и добавляет в нее записи. Далее происходит удаление части записей, обновление записей и, наконец, удаление всей таблицы. Обратите внимание на способ вставки записей. В массиве name содержатся девять имен, вставляемых в базу данных. В цикле for вызывается метод execute ), в котором параметру инструкции INSERT (обозначается символов ?) по очереди присваиваются значения, хранящиеся в массиве. Учитывая, что в MySQL поддерживается многострочная инструкция INSERT это не самый эффективный метод вставки имен, но он удобен, когда требуется выполнять произвольные пользовательские запросы. #!/usr/bin/perl # Подключение модуля DBI. use DBI; my $query; my $rows; # Подключение к базе данных. my $dbh = DBI->connect( DDI:mysql:test:localhost , leon, # Создание таблицы. $query = CREATE TABLE testapi ( . ID INT (11) NOT NULL AUTO INCREMENT, . Name VARCHAR(64), . PRIMARY KEY(ID) . $dbh->do($query) or di nt execute $query: $dbh->errstr \n ; # Вставка записей. $query = INSERT INTO testapi (Name) VALUES (?) ; my (aname = (Leon, Vicky, Carl, Ricky, Nicki, Jeff, Bob, Tina, Joey); my $sth = $dbh->prepare($query) or die Cant prepare $query: $dbh->errstr \n ; my $ n; foreach $n ((Jname) { $sth->execute($n) or die Cant execute $query: . $dbh->errstr . \n ; print($sth->rows . row insertedXn ); # Удаление записей. $query= DELETE FROM testapi WHERE ID < 4 ; $rows = $dbh->do($query) or die Can t execute $query: print($rows . rows deletedXn ); tt Обновление записей. $dbh->errstr
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |