П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 3523 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6121 раз(а).

Учебник HTML.
Просмотров 3276 раз(а).

Руководство по PHP5.
Просмотров 5497 раз(а).

Хостинг через призму DNS.
Просмотров 4148 раз(а).

Подборка текстов стандартных документов.
Просмотров 55773 раз(а).

Учебник PHP - Самоучитель
Просмотров 3093 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 5745 раз(а).

Внешние атаки...
Просмотров 3842 раз(а).

Учебник PHP.
Просмотров 2825 раз(а).

SSI в примерах.
Просмотров 37463 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Глава 8. Интерфейсы для MySQL
Пред.     След.

8.2. Интерфейс Perl API для MySQL
8.2.2. Интерфейс DBI

Унифицированные методы DBI

МетодОписание
connectСоздает соединение с сервером
disconnectРазрывает соединение с сервером
prepareГотовит SQL-запрос к выполнению
executeВыполняет приготовленный запрос
doГотовит и выполняет запрос
quoteЗаключает в символы цитирования строки или BLOB-значения, которые вы собираетесь внести
fetchrow_arrayВозвращает следующую запись как массив
fetchrow_arrayrefВозвращает следующую запись как ссылку на массив
fetchrow_hashrefВозвращает следующую запись как ссылку на хеш
fetchall_arrayrefВозвращает всю информацию как массив массивов
finishЗавершает выражение и освобождает системные ресурсы
rowsВозвращает количество измененных/удаленных строк
data_sourcesВозвращает массив, список баз данных, доступных на сервере
ChopBlanksОпределяет, будут ли методы fetchrow_* убирать начальные и оконечные пробелы
NUM_OF_PARAMSКоличество символов-заполнителей в приготовленном выражении
NULLABLEВозвращает ссылку на массив значений, которые определяют, могут ли столбцы содержать значения NULL. Возможные значения для каждого элемента массива: 0 или пустая строка, если столбец не может быть NULL, 1 - если может, и 2, если статус NULL для столбца неизвестен
traceПроизводит трассировку для отладки

Методы, определенные только для MySQL

МетодОписание
insrtidЗначение AUTO_INCREMENT, которое было присвоено последним
is_blobКакие столбцы имеют тип BLOB
is_keyКакие столбцы являются ключами
is_numКакие столбцы имеют числовой тип
is_pri_keyКакие столбцы являются первичными ключами
is_not_nullСтолбцы, которые НЕ МОГУТ иметь значение NULL. См. NULLABLE
lengthМаксимально допустимые размеры содержимого столбцов
max_lengthМаксимальные размеры столбцов, присутствующих в результате
NAMEИмена столбцов
NUM_OF_FIELDSКоличество полей, возвращенных в результате операции
tableИмена таблиц в результате
typeТипы всех столбцов

Более детально методы Perl DBI описаны в следующих разделах. Возвращаемые переменные:

  • $dbh

    Дескриптор базы данных

  • $sth

    Дескриптор выражения

  • $rc

    Код возврата (часто статус)

  • $rv

    Возвращенное значение (часто количество строк)

Унифицированные методы DBI

  • connect($data_source, $username, $password)

    Метод connect используется для подсоединения к источнику данных (СУБД). Строка $data_source должна начинаться с DBI:имя драйвера:. Примеры вызова connect с драйвером DBD::mysql:

    $dbh = DBI->connect("DBI:mysql:$database", $user, $password);
    $dbh = DBI->connect("DBI:mysql:$database:$hostname", $user,
    $password);
    $dbh = DBI->connect("DBI:mysql:$database:$hostname:$port", $user,
    $password);
    

    Если не определены имя пользователя либо пароль, DBI использует значения переменных окружения DBI_USER и DBI_PASS. Если не указано имя хоста, используется значение по умолчанию - localhost. Если не указан номер порта, также используется значение по умолчанию (3306).

    Начиная с Msql-Mysql-modules версии 1.2009, доступны следующие модификаторы $data_source:

    • mysql_read_default_file=file_name

      Читать файл file_name как файл настроек. За более подробной информацией о файлах настройки обращайтесь к разделу See Раздел 4.1.2, «Файлы параметров my.cnf».

    • mysql_read_default_group=group_name

      По умолчанию используется группа [client] файла настроек. Опцией mysql_read_default_group, группа по умолчанию устанавливается в [group_name].

    • mysql_compression=1

      Использовать сжатие при обмене клиента и сервера (MySQL версий 3.22.3 и выше).

    • mysql_socket=/path/to/socket

      Указывает путь к Unix-сокету, который будет использоваться для соединения с сервером. (MySQL версии 3.21.15 и более поздние).

    Можно указывать не один модификатор, а несколько; при этом каждый должен предваряться точкой с запятой.

    Например, если вы не хотите явно указывать имя пользователя и пароль в программе, использующей DBI, можно внести эту информацию в файл ~/.my.cnf, написав вызов connect. Это делается следующим образом:

    $dbh = DBI -> connect("DBI:mysql:$database",
    ";mysql_read_default_file=$ENV{HOME}/.my.cnf",
    $user, $password);
    

    Данный пример считает настройки из группы [client] файла ~/.my.cnf. Чтобы выполнить те же действия, но с настройками, взятыми из группы [perl], нужно использовать следующую форму записи:

    $dbh = DBI -> connect("DBI:mysql:$database",
    ";mysql_read_default_file=$ENV{HOME}/.my.cnf"
    . ";mysql_read_default_group=perl",
    $user, $password);
    
  • disconnect

    Метод disconnect разрывает соединение с базой данных. Это стоит делать перед выходом из программы. Пример:

    $rc = $dbh->disconnect;
    
  • prepare($statement)

    Подготавливает SQL-запрос $statement к исполнению сервером. Возвращает дескриптор выражения ($sth), который затем используется для вызова метода execute. Обычно работа с запросами типа SELECT (так же, как и аналогичными, такими как SHOW, DESCRIBE, EXPLAIN) сводится к вызову методов prepare и execute. Пример:

    $sth = $dbh -> prepare($statement)
    or die "Не  могу  подготовить $statement: $dbh -> errstr\n";
    

    Если вы хотите считывать большие результаты вашим клиентом, вы можете указать использование mysql_use_result() в Perl:

    my $sth = $dbh->prepare($statement { "mysql_use_result" => 1});
    
  • execute

    Метод execute выполняет приготовленный запрос. Если запрос не SELECT, метод возвращает количество строк, которые были подверглись воздействию запроса. Если таковых нет, execute возвращает "0E0", что Perl интерпретирует как нуль, но воспринимает как значение "истина" (true). Если возникает ошибка, execute возвращает undef. Для запросов SELECT метод только инициирует выполнение запроса SQL-сервером и для получения данных необходимо использовать один из методов fetch_*. Пример:

    $rv = $sth -> execute or die "Не могу выполнить: $sth -> errstr";
    
  • do($statement)

    Метод do готовит SQL-запрос к выполнению, выполняет его и возвращает количество строк, подвергшихся воздействию. Если нет ни одной такой строки, как результат возвращается значение "0E0", что Perl интерпретирует как нуль, но воспринимает как значение "истина" (true).. Этот метод обычно используется для выражений, не являющихся операторами SELECT, которые не могут быть подготовлены заранее (из-за ограничений драйвера) или же выполняются только один раз (операции вставки, удаления и т.д.). Например:

    $rv = $dbh->do($statement)
    or die "Не могу выполнить: $sth -> errstr";
    

    Обычно использование 'do' существенно быстрей (и предпочтительней) для запросов без параметров, чем пара prepare/execute.

  • quote($string)

    Метод quote используется для экранирования специальных символов в запросе символами экранирования, а также заключения данных в необходимые внешние символы цитирования (например кавычки). Пример:

    $sql = $dbh->quote($string)
    
  • fetchrow_array

    Этот метод выбирает очередную строку данных и возвращает ее как массив значений полей. Пример:

    while(@row = $sth -> fetchrow_array) {
    print qw($row[0]\t$row[1]\t$row[2]\n);
    }
    
  • fetchrow_arrayref

    Этот метод выбирает очередную строку данных и возвращает ссылку на массив значений полей. Пример:

    while($row_ref = $sth -> fetchrow_arrayref) {
    print qw($row_ref -> [0]\t$row_ref -> [1]\t$row_ref ->
    [2]\n);
    }
    
  • fetchrow_hashref

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

    while($hash_ref = $sth -> fetchrow_hashref) {
    print qw($hash_ref -> {firstname}\t$hash_ref ->
    {lastname}\t$hash_ref ->{title}\n);
    }
    
  • fetchall_arrayref

    Этот метод выдает все данные (все строки), получаемые как результат SQL-запроса. Он возвращает ссылку на массив ссылок на массивы отдельных строк. Соответственно, для обращения к этим данным нужно использовать вложенный цикл. Пример:

    my $table = $sth -> fetchall_arrayref
    or die "$sth -> errstr\n";
    my($i, $j);
    for $i ( 0 .. $#{$table}} ) {
    for $j ( 0 .. $#{$table -> [$i]} )  {
    print "$table -> [$i][$j]\t";
    }
    print "\n";
    }
    
  • finish

    Указывает, что данные этого дескриптора запроса больше не нужны. После вызова этого метода программа освобождает дескриптор запроса и все системные ресурсы, которые используются для работы с ним. Пример:

    $rc = $sth -> finish;
    
  • rows

    Возвращает число измененных/удаленных последней командой (UPDATE, DELETE и т.д.) строк. Это обычно требуется после выполнения метода execute над запросами, не являющимися запросами SELECT. Например:

    $rv = $sth -> rows;
    
  • NULLABLE

    Возвращает ссылку на массив значений, которые указывают, может столбец принимать значения NULL или нет. Возможные значения для каждого элемента массива - это 0 или пустая строка, если столбец не может содержать значения NULL, 1 - если может и 2 - если статус столбца относительно значения NULL не определен.

    Например:

    $null_possible = $sth -> {NULLABLE};
    
  • NUM_OF_FIELDS

    Значение этого атрибута равно числу полей в результате запроса (SELECT или SHOW FIELDS). Его можно использовать его для проверки, возвращает ли запрос результат вообще: нулевое значение соответствует запросам типа INSERT, DELETE, UPDATE - т.е. всем, кроме SELECT. Например:

    $nr_of_fields = $sth -> {NUM_OF_FIELDS};
    
  • data_sources($driver_name)

    Этот метод возвращает массив с именами баз данных, доступных на локальном MySQL-сервере (на localhost). Пример:

    @dbs = DBI->data_sources("mysql");
    
  • ChopBlanks

    Этот атрибут определяет, будут ли методы fetchrow_* убирать начальные и оконечные пробелы из результатов. Пример:

    $sth -> {'ChopBlanks'} = 1;
    
  • trace($trace_level), trace($trace_level, $trace_filename)

    Метод trace разрешает или запрещает трассировку. Если он вызывается как метод класса DBI, он влияет на разрешение трассировки всех дескрипторов. В случае же обращения к нему как к методу дескриптора запроса либо базы данных он разрешает/запрещает трассировку для этой базы данных или этого запроса (и всех будущих потомков). $trace_level указывает уровень детализации трассировочной информации, так установка $trace_level в 2 включает детализированную трассировку. Установка $trace_level в 0 запрещает трассировку. По умолчанию вывод трассировочной информации осуществляется на стандартное устройство вывода ошибок (stderr). Если указан параметр $trace_filename, его значение используется как имя файла, в который выводится трассировочная информация ВСЕХ дескрипторов, для которых разрешена трассировка. Пример:

    DBI->trace(2);# трассировка всего
    DBI->trace(2,"/tmp/dbi.out"); # трассировка всего в /tmp/dbi.out
    $dth->trace(2); # трассировка всех запросов к этой базе
    данных
    $sth->trace(2); # трассировка этого запроса
    

    Трассировку DBI можно также включить при помощи переменной окружения DBI_TRACE. Присвоение числового значения эквивалентно вызову DBI->trace(значение). Строковое значение (имя файла) эквивалентно вызову DBI->trace(2,значение).

Методы, специфичные для MySQL

Описанные здесь методы специфичны для MySQL и не являются частью стандарта DBI. Сейчас считается, что часть из них использовать не стоит: is_blob, is_key, is_num, is_pri_key, is_not_null, length, max_length и table. Ниже указаны возможные стандартные альтернативы, если они существуют:

  • insertid

    Если вы используете специфичную для MySQL функцию AUTO_INCREMENT, здесь будут сохраняться автоматически увеличенные значения. Пример:

    $new_id = $sth->{insertid};
    

    В качестве альтернативы можно использовать $dbh -> {'mysql_insertid'}.

  • is_blob

    Возвращает ссылку на массив булевых значений; для каждого элемента массива значение "истина" указывает, что соответствующий столбец имеет тип BLOB. Например:

    $keys = $sth -> {is_blob};
    
  • is_key

    Возвращает ссылку на массив булевых значений; для каждого элемента массива значение "истина" указывает, что соответствующий столбец является ключом. Пример:

    $keys = $sth -> {is_key};
    
  • is_num

    Возвращает ссылку на массив булевых значений; для каждого элемента массива, значение "истина" указывает, что соответствующий столбец содержит числовые значения. Например:

    $nums = $sth -> {is_num};
    
  • is_pri_key

    Возвращает ссылку на массив булевых значений; для каждого элемента массива, значение "истина" указывает, что соответствующий столбец является первичным ключом. Пример:

    $pri_keys = $sth -> {is_pri_key};
    
  • is_not_null

    Возвращает ссылку на массив б булевых значений; для каждого элемента массива значение "ложь" указывает на то, что столбец может содержать значения NULL. Например:

    $not_nulls = $sth -> {is_not_null};
    

    is_not_null не рекомендуется к применению; предпочтительно использование NULLABLE (описан ранее), поскольку это стандартный для DBI метод.

  • length, max_length

    Каждый из этих методов возвращает ссылку на массив размеров столбцов. Массив, соответствующий length, содержит максимальные допустимые размеры каждого столбца (из описания таблицы). Массив max_length содержит максимальные размеры элементов, присутствующих в результирующей таблице. Например:

    $lengths = $sth -> {length};
    $max_lengths = $sth -> {max_length};
    
  • NAME

    Возвращает ссылку на массив имен столбцов. Например:

    $names = $sth -> {NAME};
    
  • table

    Возвращает ссылку на массив названий таблиц. Например:

    $tables = $sth -> {table};
    
  • type

    Возвращает ссылку на массив типов столбцов. Пример:

    $types = $sth -> {type};
    

Назад Начало Главы Начало Раздела Вперед

Пред. Глава След. Глава
Глава 7. Типы таблиц MySQL Начало Книги Глава 9. Расширение MySQL


Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru