Показаны сообщения с ярлыком ADODB – русская документация. Показать все сообщения
Показаны сообщения с ярлыком ADODB – русская документация. Показать все сообщения

суббота, 26 января 2019 г.

ADODB – русская документация

ADODB – русская документация

Автор: John Lim
Перевод: Феськов Кузьма
1.   Вступление
2.   Уникальные возможности ADODB
3.   Инструкция по установке
3.1   Минимальная установка
3.2   Инициализация класса
3.3   Поддержка Data Source Name (DSN)
3.3   Примеры соединения с базами данных
4.   Настройка ADODB для более высокой производительности
4.1   Дополнительные подсказки
5.   Модернизация ADODB
6.   Возможности PHP5
7.   Поддерживаемые базы данных
8.   Примеры
1. Вступление
Функции доступа к базам данных в PHP не стандартизированы. Это создает потребность в классе, который бы скрыл эту разницу в программном интерфейсе при работе с различными базами (инкапсулировать различия), позволяя легко переключаться с одной базы данных на другую. Для работы вам потребуется PHP версии 4.0.5 и выше, поскольку в скриптах используется str_replace.
В настоящее время поддерживается работа с базами MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, SQLite, Interbase (Firebird and Borland variants), Foxpro, Access, ADO, DB2, SAP DB и ODBC. Также были успешными попытки подсоединиться к Progress и CacheLite. Мы надеемся, что пользователи создадут драйвера и для других баз данных.
PHP поддерживает переменные сессии. Вы можете хранить данные сессии в базе при помощи ADOdb для истинной мобильности и масштабируемости. Дополнительную информацию ищите в Adodb-session.php.
2. Уникальные возможности ADODB
  • Легок в изучении для Windows-программистов, поскольку использует синтаксис близкий к Microsoft ADO.
  • В отличие от других PHP классов, которые в основном фокусируются только на SELECT-запросах, мы обращаем внимание также на команды вставки (INSERT) и изменения (UPDATE) данных, которые очень быстро могут модернизироваться под потребности различных баз данных. Также существуют методы для обработки дат, конкатенации строк и экранирования строк по правилам различных баз данных.
  • Система мето-типов построена так, чтоб вы могли быть уверенными, что сохраняемые вами данные, например CHARTEXTSTRING, будут одинаковыми для всех баз данных.
  • Легкая переносимость, потому что все низкоуровневые функции вынесены отдельно и вам нет необходимости вносить изменения в ядро класса.
  • Переносимость на уровне создания таблиц и индексов.
  • Контроль работы базы данных и тонкая настройка производительности.
  • Поддержка сессии на уровне базы данных, поддержка истечения времени сессии и уведомлений.
3. Инструкция по установке
Проверьте, что вы используете PHP 4.0.5 и выше. Распакуйте все файлы в папку, доступную для вебсервера.
Для проверки попробуйте запустить несколько файлов из обучающего курса. Убедитесь, что вы вы правильно установили параметры подключения. Для отладки используйте команду $db->debug = true, как показано ниже:
<?php
include('adodb/adodb.inc.php');$db ADONewConnection($dbdriver); # например 'mysql' или 'postgres'$db->debug true;$db->Connect($server$user$password$database);$rs $db->Execute('select * from some_small_table');
print 
"&lt;pre>";print_r($rs->GetRows());
print 
"&lt;/pre>";
3.1 Минимальная установка
Для разработчиков, которые нуждаются в минимальном наборе функций, рекомендуем установить следующие файлы:
  • adodb.inc.php
  • ADODB-lib.inc.php
  • ADODB-time.inc.php
  • Драйверы / adodb- $ database.inc.php
  • license.txt (по юрридическим причинам)
  • ADODB-php4.inc.php
  • ADODB-iterator.inc.php
Дополнительно:
  • adodb-error.inc.php и lang/adodb-$lang.inc.php (если вы используете MetaError())
  • adodb-csvlib.inc.php (если вы используете кэширование запросов - CacheExecute(), и др.)
  • adodb-exceptions.inc.php и adodb-errorhandler.inc.php (если вы используете adodb error handlerили исключения PHP5).
3.2 Инициализация класса
Для запуска ADODB требуется 2 файла: первый – adodb/adodb.inc.php (содержит базовые функции, которые используются во всех классах) и, второй, - adodb/driver/adodb-????.inc.php (определяет специфические для конкретной базы данных функции).
Вот пример соединения с базой MySql:
<?phpinclude('/path/to/set/here/adodb.inc.php');$conn = &ADONewConnection('mysql');
Всякий раз, как вы соединяетесь с базой данных, создается новый объект (ADONewConnection($driver)). NewADOConnection($driver) – альтернативное название предыдущей функции.
На этом этапе вы никак не связаны с базой данных. Вам надо определиться – будете ли вы использовать постоянное или непостоянное соединение. Преимущество постоянного соединения в том, что оно быстрее, поскольку связь с базой данных никогда не теряется (даже когда вы даете команду Close()). Непостоянные соединения требуют гораздо меньше ресурсов, однако повышают вероятность того, что ваша база данных и веб-сервер будут перегружены.
Для постоянного соединения используйте команду $conn->PConnect(). Для непостоянного соединения – $conn->Connect(). Некоторые базы данных поддерживают также Nconnect() – эта команда вынуждает создать новое соединение.
Важное замечание: Если вы создаете два соединения, но оба они используют одинаковое имя пользователя (userid) и пароль, PHP не станет создавать новое соединение, а примет для работы первое, ранее созданное. Это может привести к проблемам в том случае, если вы от имени одного пользователя пытались соединиться к разным базам данных. Решение данной проблемы состоит в том, чтобы всегда использовать разное имя пользователя (userid) для разных баз данных, или использовать команду Nconnect().
3.3 Поддержка Data Source Name (DSN)
Начиная с версии ADODB 4.51 вы можете соединяться с базой передавая NewADOConnection() (или ADONewConnection()) параметры в виде DSN:
$ Водитель: // $ Имя пользователя: пароль @ $ Имя хоста / $ базы опций [= значение]
NewADOConnection() вызывает Connect() или Pconnect() внутри себя. В случае неудачи возвращает FALSE:
<?php
# непостоянное соединение$dsn 'mysql://root:pwd@localhost/mydb'$db NewADOConnection($dsn);
if (!
$db) die("Connection failed");  
# нет необходимости вызывать connect/pconnect$arr $db->GetArray("select * from table");
# постоянное соединение$dsn2 'mysql://root:pwd@localhost/mydb?persist';
Если в DSN у вас присутствуют специальные символы, типа :? вы должны вызвать команду rawurlencode:
<?php

$pwd 
rawurlencode($pwd);$dsn "mysql://root:$pwd@localhost/mydb";
Стандартные варианты:
  • Для всех движков баз: 'persist', 'persistent', 'debug', 'fetchmode'
  • Для Interbase / Firebird : «диалект», «кодировка», «буферы», «роль» 
  • Для M'soft ADO: 'charpage'
  • Для MySQL : «клиентские флаги» 
  • Для MySQLi : 'port', 'socket', 'clientflags' 
  • Для Oci8 : 'nls_date_format' 
Для всех драйверов справедливо: если вы задали установить постоянное и непостоянное соединения одновременно – будет установлено постоянное соединение. Debug – включает отладку. Fetchmode – вызывает функцию SetFetchMode().Если вы не указали никакого значение, то значение будет выставлено в 1.
ADODB DSN совместимы с версией 1.0 формата PEAR DB's DSN Format.
3.3 Примеры соединения с базами данных
MySql и большинство других баз данных
Mysql соединение имеет очень простой формат и параметры аналогичны mysql_connect:
<?php

$conn 
= &ADONewConnection('mysql'); $conn->PConnect('localhost','userid','password','database');
# или DSN$dsn 'mysql://user:pwd@localhost/mydb'$conn ADONewConnection($dsn);  # нет необходимости в Connect()

# или постоянное DSN
$dsn 'mysql://user:pwd@localhost/mydb?persist'$conn ADONewConnection($dsn);  # нет необходимости в PConnect()

# Более сложный пример:
$pwd urlencode($pwd);$flags =  MYSQL_CLIENT_COMPRESS;$dsn "mysql://user:$pwd@localhost/mydb?persist&clientflags=$flags";$conn ADONewConnection($dsn);  # нет необходимости в Pconnect()
Для большинства драйверов вы можете использовать стандартную функцию Connect($server, $user, $password, $database), или DSN (начиная с версии 4.51). Исключения будут описаны ниже.
PostgreSQL
PostgreSQL 7 и 8 поддерживает строки соединения:
а) стандартная строка соединения:
<?php

$conn 
= &ADONewConnection('postgres');  $conn->PConnect('host=localhost port=5432 dbname=mary');
б) классические 4 параметра:
<?php

$conn
->PConnect('localhost','userid','password','database');
в) DSN:
<?php

$dsn 
'postgres://user:pwd@localhost/mydb?persist';  # persist необязательный параметр$conn ADONewConnection($dsn);  # нет необходимости в Connect/PConnect
LDAP
Вот пример для работы с LDAP сервером. Благодарим Джоша Элдридджа за драйвер и этот пример:
<?php
require('/path/to/adodb.inc.php');
/* Убедитесь, что вы задали эти параметры ДО вызова Connect() */$LDAP_CONNECT_OPTIONS = Array(
    Array (
"OPTION_NAME"=>LDAP_OPT_DEREF"OPTION_VALUE"=>2),
    Array (
"OPTION_NAME"=>LDAP_OPT_SIZELIMIT,"OPTION_VALUE"=>100),
    Array (
"OPTION_NAME"=>LDAP_OPT_TIMELIMIT,"OPTION_VALUE"=>30),
    Array (
"OPTION_NAME"=>LDAP_OPT_PROTOCOL_VERSION,"OPTION_VALUE"=>3),
    Array (
"OPTION_NAME"=>LDAP_OPT_ERROR_NUMBER,"OPTION_VALUE"=>13),
    Array (
"OPTION_NAME"=>LDAP_OPT_REFERRALS,"OPTION_VALUE"=>FALSE),
    Array (
"OPTION_NAME"=>LDAP_OPT_RESTART,"OPTION_VALUE"=>FALSE)
);
$host 'ldap.baylor.edu';$ldapbase 'ou=People,o=Baylor University,c=US';
$ldap NewADOConnection'ldap' );$ldap->Connect$host$user_name=''$password=''$ldapbase );

echo 
"&lt;pre>";
print_r$ldap->ServerInfo() );$ldap->SetFetchMode(ADODB_FETCH_ASSOC);$userName 'eldridge';$filter="(|(CN=$userName*)(sn=$userName*)(givenname=$userName*)(uid=$userName*))";
$rs $ldap->Execute$filter );
if (
$rs)
    while (
$arr $rs->FetchRow()) {
        
print_r($arr);    
    }
$rs $ldap->Execute$filter );
if (
$rs)
    while (!
$rs->EOF) {
        
print_r($rs->fields);  
        
$rs->MoveNext();
    }
        
print_r$ldap->GetArray$filter ) );print_r$ldap->GetRow$filter ) );
$ldap->Close();
echo 
"&lt;/pre>";
Использование DSN:
$dsn "ldap://ldap.baylor.edu/ou=People,o=Baylor University,c=US";$db NewADOConnection($dsn);
Interbase / Firebird
База данных определяется в параметре $host:
$conn = &ADONewConnection('ibase'); $conn->PConnect('localhost:c:ibaseemployee.gdb','sysdba','masterkey');
или DSN : 
$dsn 'firebird://user:pwd@localhost/mydb?persist&dialect=3';  # persist необязательный параметр$conn ADONewConnection($dsn);  # нет необходимости в Connect/PConnect
SQLite
SQLite создаст файл базы данных, если его до сих пор небыло:
$conn = &ADONewConnection('sqlite');$conn->PConnect('c:path    osqlite.db'); # sqlite создаст файл, если его небыло
или DSN : 
$path urlencode('c:path    osqlite.db');$dsn "sqlite://$path/?persist";  # persist необязательный параметр$conn ADONewConnection($dsn);  # нет необходимости в Connect/PConnect
Оракул (oci8)
С oci8 вы можете устанавливать соединение множеством способов. Обратите внимание, что способы работы с oci8прекрасно подходят и для более новых версий Oracle (9i и 10g).
а) PHP и Oracle находятся на одной машине, используют SID поумолчанию:
$conn->Connect(false'scott''tiger');
б) TSN Name определяется в файле tnsnames.ora (или ONAMES, или HOSTNAMES), аналогично 'myTNS':
$conn->PConnect(false'scott''tiger''myTNS');
или
$conn->PConnect('myTNS''scott''tiger');
в) Host адрес и SID:
$conn->Connect('192.168.0.1''scott''tiger''SID');
г) Host адрес и имя сервиса (Service Name):
$conn->Connect('192.168.0.1''scott''tiger''servicename');
д) строка соединения Oracle:
$cstr "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$host)(PORT=$port))
                (CONNECT_DATA=(SID=$sid)))"
;$conn->Connect($cstr'scott''tiger');
f) ADODB DSN : 
$dsn 'oci8://user:pwd@tnsname/?persist';  # persist необязательный параметр$conn ADONewConnection($dsn);  # нет необходимости в Connect/PConnect
$dsn 'oci8://user:pwd@host/sid';$conn ADONewConnection($dsn);
$dsn 'oci8://user:pwd@/';   # oracle на локальной машине$conn ADONewConnection($dsn);
Также вы можете установить кодировку (charset) для Oracle версии 9.2 и выше (поддерживается в PHP версии 4.3.2 и выше и ADODB с версии 4.54).
$conn->charSet 'we8iso8859p1';$conn->Connect(...);
# или$dsn 'oci8://user:pwd@tnsname/?charset=WE8MSWIN1252';$db ADONewConnection($dsn);
DSN-less ODBC (примеры для Access, MSSQL и DB2)
ODBC DSN'ы могут быть созданы в панели настроек ODBC, или вы можете использовать DSN-less соединения. Для использования DSN-less соединений с ODBC вам понадобится PHP версии 4.3 или выше.
Для Microsoft Access : 
$db =& ADONewConnection('access');$dsn "Driver={Microsoft Access Driver (*.mdb)};Dbq=d:
orthwind.mdb;Uid=Admin;Pwd=;"
;$db->Connect($dsn);
Для Microsoft SQL Server : 
$db =& ADONewConnection('odbc_mssql');$dsn "Driver={SQL Server};Server=localhost;Database=northwind;";$db->Connect($dsn,'userid','password');
или, если вы предпочитаете использовать расширение mssql (который ограничен функциональность mssql 6.5):
$db =& ADONewConnection('mssql');$db->Execute('localhost''userid''password''northwind');
Для DB2:
$db =& ADONewConnection('db2');$dsn "driver={IBM db2 odbc DRIVER};Database=sample;hostname=localhost;port=50000;protocol=TCPIP;".
                
"uid=root; pwd=secret";$db->Connect($dsn);
DSN-less соединения с ADO
Если вы используете PHP версии меньше, чем 4.3.0, то DSN-less соединения будут работать только с Microsoft's ADO, через, основанное на Microsoft COMAPI. Пример использования библиотеки ADODB и Microsoft's ADO:
include('adodb.inc.php'); $db = &ADONewConnection("ado_mssql");
print 
"&lt;h1>Соединение DSN-less $db->databaseType...&lt;/h1>";
        
$myDSN="PROVIDER=MSDASQL;DRIVER={SQL Server};"
        
"SERVER=flipper;DATABASE=ai;UID=sa;PWD=;"  ;$db->Connect($myDSN);
$rs $db->Execute("select * from table");$arr $rs->GetArray();print_r($arr);
4. Настройка ADODB для более высокой производительности
ADODB – это очень большая библиотека, которая всеже превосходит все другие библиотеки PHP в производительности. Это происходит потому, что она разработана в виде слоев, подобно луку, самые быстрые функции расположены во внутреннем слое. Придерживайтесь использования следующих функций для большей производительности:
Самый низкоуровневый слой:
ConnectPConnectNConnect
Execute
CacheExecute
SelectLimit
CacheSelectLimit
MoveNext
Close
qstr
Affected_RowsInsert_ID
Самый быстрый способ получить доступ к данным, это обращаться непосредственно к массиву с данными $recordset->fields. Также установите значения глобальным переменным $ADODB_FETCH_MODE = ADODB_FETCH_NUM, и (для oci8ibase/firebird и odbc$ADODB_COUNTRECS = false до того, как подключитесь к базе данных.
Используйте связанные параметры, если ваша база данных поддерживает это, поскольку это улучшает повторное использование запросов. Используйте систему тонкой настройки ADODB для быстрого выявления узких мест. На время написания (Дек. 2003) это справедливо и для oci8 и odbc драйверов.
Наконец, убедитесь, что у вас установлен PHP акселератор кэширования, например, APC, Turck MMCache, Zend Accelerator или ionCube.
Несколько примеров:
Быстрый доступ к данным в PHP:
$rs =& $rs->Execute($sql);
while (!
$rs->EOF) {
    
var_dump($rs->fields);
    
$rs->MoveNext();
}
Быстрый доступ к данным в ADODB:
$rs =& $rs->Execute($sql);$array adodb_getall($rs);var_dump($array);
4.1 Дополнительные подсказки
Если у вас установлено расширение ADODB, написанное на C, вы можете заменить ваши запросы к $rs->MoveNex() на adodb_movenex($rs). Эта команда удваивает скорость операции. Для того, чтобы получить записи целиком, используйте GetArray(), которая использует высокоскоростную функцию расширения adodb_getall($rs).
Execute() - это основной способ запуска запросов. Вы можете использовать функции низкого уровня _Execute() и _query(), чтобы уменьшить цепочку функций. Обе эти функции принимают теже самые параметры, что и Execute().
Если вы не используете связанные параметры, или ваша база данных поддерживает связанные параметры (без эмуляции) вы можете вызывать _Execute() непосредственно. Вызов этих функций обходит эмуляцию связанных параметров. _Execute() поддерживает отладку.
Если вам не требуется отладка, вы не используете связанные данные и вам не нужны возвращаемые значения – используйте функцию _query(). Эта функция хорошо подходит для вставки (INSERT), обновления (UPDATE) и удаления (DELETE). Вызов функции _query() позволит вам обойти отладку, эмуляцию связанных данных и обработку возвращаемых результатов. Функция возвращает TRUE или FALSE.
Для Informix вы можете выключить scrollable курсоры командой $db->cursorType = 0.
5. Модернизация ADODB
Вы вполне можете хотеть изменить ADODB под свои собственные нужды. К счастью, вы легко можете поддерживать обратную совместимость расширяя ADODB и используя переменную $ADODB_NEWCONNECTION$ADODB_NEWCONNECTION позволяет перекрыть поведение ADONewConnection()ADONewConnection() проверяет эту переменную и вызывает функцию с именем, сохраненным в этой переменной.
В следующем примере, новые функциональные возможности для объекта соединения помещены в классы hack_mysql и hack_postgres7. Название классов (навязанные соглашения) для обработки данных контролируются при помощи переменной $rsPrefix. Здесь мы устанавливаем ее в 'hacks_rs_', это заставит ADODB использовать hacks_rs_mysql и hacks_rs_postgres7 как классы для обработки данных.
class hack_mysql extends adodb_mysql {
var 
$rsPrefix 'hack_rs_';
  
/* Ваши изменения здесь */}

class 
hack_rs_mysql extends ADORecordSet_mysql {
     
/* Ваши изменения здесь */}

class 
hack_postgres7 extends adodb_postgres7 {
var 
$rsPrefix 'hack_rs_';
  
/* Ваши зменения здесь */}

class 
hack_rs_postgres7 extends ADORecordSet_postgres7 {/* Ваши изменения здесь */}
$ADODB_NEWCONNECTION 'hack_factory';

function& 
hack_factory($driver)
{
    if (
$driver !== 'mysql' && $driver !== 'postgres7') return false;
   
    
$driver 'hack_'.$driver;
    
$obj = new $driver();
    return 
$obj;
}

include_once(
'adodb.inc.php');
Незабудьте вызывать конструктор родительского класса из вашего конструктора. Если вы хотите использовать драйвер ADODB поумолчанию – верните FALSE из hack_factory().
6. Возможности PHP5
Начиная с версии ADODB 4.02 класс прозрачно определяет, какую версию PHP вы используете. В случае обнаружения PHP5 становятся доступными следующие возможности:
  • Foreach итераторы: это очень естественный способ обработки данных:
    $ADODB_FETCH_MODE ADODB_FETCH_NUM;
        
    $rs $db->Execute($sql);
        foreach(
    $rs as $k => $row) {
            echo 
    "r1=".$row[0]." r2=".$row[1]."<br>";
        }
  • Исключения: Стоит включить adodb-exeptions.inc.php и вы с легкостью сможете перехватывать исключения на ошибках в момент их возникновения:
    include("../adodb-exceptions.inc.php");
        include(
    "../adodb.inc.php");    
        try {
            
    $db NewADOConnection("oci8");
            
    $db->Connect('','scott','bad-password');
        } catch (
    exception $e) {
            
    var_dump($e);
            
    adodb_backtrace($e->gettrace());
        }
Обратите внимание, что достижение EOF не считается ни ошибкой ни исключением. Если вы хотите использовать драйвер поумолчанию – верните FALSE.
7. Поддерживаемые базы данных
Параметр 'Имя' – это то, что вы должны передать в функцию NewADOConnection($name).
Колонка 'Тест' указывает, насколько хорошо код был проверен и используется:
  • A – хорошо проверенный и используемый многими людьми;
  • B – проверен и годен к употреблению, однако некоторые особенности не могут быть реализованы;
  • C – экспериментальный драйвер, не может поддерживать все возможности ADODB.
Колонка 'RecordCount()' показывает – возвращает ли эта функция колличество запрошенных строк или возвращает -1, если SELECT выполнен. Если указано 'Y/N' – происходит эмуляция, если глобальная переменная $ADODB_COUNTRECS=true (это значение по умолчанию). Обратите внимание, что для большого количества результатов лучше эту возможность выключить, потомучто потребуется значительное количество памяти для проведения расчетов. Также, эмуляция снижает скорость работы на 40-50%. Это эмулируется в большинстве баз данных кроме PostgreSQL и MySql. Эта переменная проверяется каждый раз, когда вы запускаете запрос, так что вы можете выбрать, какие данные вам считать.
ИмяТестБаза данныхRecordCount ()ТребованияОС
доступВMicrosoft Access / Jet. Вам нужно создать ODBC DSN.Да / нетODBCТолько для Windows
подростокВ
Общий ADO, не настроенный для конкретных баз данных. Разрешает подключения без DSN. Для лучшей производительности используйте поставщика OLEDB. Это базовый класс для всех драйверов ado.
Вы можете установить $ db-> codePage перед подключением.
? зависит от базы данныхADO или OLEDB провайдерТолько для Windows
ado_accessВMicrosoft Access / Jet с использованием ADO. Разрешает подключения без DSN. Для лучшей производительности используйте поставщика OLEDB.Да / нетADO или OLEDB провайдерТолько для Windows
ado_mssqlВMicrosoft SQL Server с использованием ADO. Разрешает подключения без DSN. Для лучшей производительности используйте поставщика OLEDB.Да / нетADO или OLEDB провайдерТолько для Windows
db2ADB2. Должно работать надежно, так как основано на драйвере ODBC.Да / нетИнтерфейс DB2 CLI / ODBC
Unix и Windows. Unix советы по установке, У меня были сообщения о том, что параметры $ host и $ database должны быть изменены в Connect () при использовании интерфейса CLI.
VFPAMicrosoft Visual FoxPro. Вам нужно создать ODBC DSN.Да / нетODBCТолько для Windows
fbsqlСFrontBase.и?
Unix и Windows
IBaseВInterbase 6 или ранее. Некоторые пользователи сообщают, что вам может понадобиться использовать
$ db-> PConnect ('localhost: c: /ibase/employee.gdb', "sysdba", "masterkey") для подключения. Недостатки Acted_Rows в настоящее время.

Вы можете установить $ db-> role, $ db-> dialect, $ db-> buffers и $ db-> charSet перед подключением.
Да / нетInterbase клиентUnix и Windows
жар-птицаСFirebird версия Interbase.Да / нетInterbase клиентUnix и Windows
borland_ibaseСBorland версия Interbase 6.5 или более поздняя. Очень грустно, что вилки различаются.Да / нетInterbase клиентUnix и Windows
InformixСУниверсальный драйвер informix. Используйте это, если вы используете Informix 7.3 или новее.Да / нетКлиент InformixUnix и Windows
informix72СБазы данных Informix до версии Informix 7.3, которые не поддерживают SELECT FIRST.Да / нетКлиент InformixUnix и Windows
LDAPСДрайвер LDAP. Смотрите этот пример для получения информации об использовании. Расширение LDAP?
MSSQLA
Microsoft SQL Server 7 и более поздние версии. Работает с Microsoft SQL Server 2000 также. Обратите внимание, что форматирование даты проблематично с этим драйвером. Например, расширение PHP mssql не возвращает секунд для даты и времени!
Да / нетMssql клиент
Unix и Windows.
Unix установить Howtoа также другой.
mssqlpoA
Портативный драйвер mssql. Идентичен приведенному выше драйверу mssql, за исключением того, что «||», оператор конкатенации, преобразуется в «+». Полезно для переноса скриптов из большинства других вариантов SQL, которые используют ||.
Да / нетMssql клиент
MySQLAMySQL без поддержки транзакций. Вы также можете установить $ db-> clientFlags перед подключением.иКлиент MySQLUnix и Windows
mysqlt  или maxsql A
MySQL с поддержкой транзакций. Мы рекомендуем использовать || как оператор concat для лучшей переносимости. Это можно сделать, запустив MySQL с помощью: mysqld --ansi или mysqld --sql-mode = PIPES_AS_CONCAT
  
Да / нетКлиент MySQLUnix и Windows
oci8AOracle 8/9. Имеет больше функций, чем драйвер оракула (например, Acted_Rows). Вам может понадобиться putenv ('ORACLE_HOME = ...') перед подключением / подключением к ПК.  
Существует два способа подключения - с использованием IP- адреса сервера и имени службы: PConnect ('serverip: 1521', 'scott', 'tiger', 'service' ) или использование записи в TNSNAMES.ORA или ONAMES или HOSTNAMES: PConnect (false , «Скотт», «Тигр», $ oraname) .


Начиная с версии 2.31, мы напрямую поддерживаем переменные курсора Oracle REF (см. ExecuteCursor ). 
Да / нетКлиент OracleUnix и Windows
oci805СПоддержка ограниченной функциональности Oracle для Oracle 8.0.5. SelectLimit не так эффективен, как в драйверах oci8 или oci8po.Да / нетКлиент OracleUnix и Windows
oci8poAПереносной драйвер Oracle 8/9. Это почти идентично драйверу oci8, за исключением того, что (a) переменные связывания в Prepare () используют? соглашение, вместо: bindvar, (b) имена полей используют более распространенное соглашение PHP о строчных именах.
Используйте этот драйвер, если важен перенос из других баз данных. В противном случае драйвер oci8 предлагает лучшую производительность.
Да / нетКлиент OracleUnix и Windows
ODBCAОбщий ODBC, не настроенный для конкретных баз данных. Для подключения используйте PConnect («DSN», «user», «pwd»). Это базовый класс для всех драйверов, производных от ODBC.
? зависит от базы данныхODBCUnix и Windows. Unix намеки.
odbc_mssqlСИспользует ODBC для подключения к MSSQLДа / нетODBCUnix и Windows.
odbc_oracleСИспользует ODBC для подключения к OracleДа / нетODBCUnix и Windows.
odbtpСОбщий драйвер odbtp. Odbtp программное обеспечение для доступа к источникам данных Windows ODBC из других операционных системДа / нетodbtpUnix и Windows
odbtp_unicodeСOdtbp с поддержкой юникодаДа / нетodbtpUnix и Windows
оракулСРеализует старый клиентский API Oracle 7. По возможности используйте драйвер oci8 для лучшей производительности.Да / нетКлиент OracleUnix и Windows
NetezzaСNetezza водитель. Netezza основана на кодовой базе postgres.и??
п.д.о.СУниверсальный драйвер PDO для PHP5.иДрайверы расширения PDO и базы данныхUnix и Windows.
PostgresAУниверсальный драйвер PostgreSQL. В настоящее время идентичен драйверу postgres7.иКлиент PostgreSQLUnix и Windows.
postgres64AДля PostgreSQL 6.4 и более ранних версий, которые не поддерживают LIMIT внутри.иКлиент PostgreSQLUnix и Windows.
postgres7APostgreSQL, который поддерживает LIMIT и другие функции версии 7.иКлиент PostgreSQLUnix и Windows.
postgres8APostgreSQL, который поддерживает функциональность версии 8.иКлиент PostgreSQLUnix и Windows.
sapdbСБД SAP. Должно работать надежно, так как основано на драйвере ODBC.Да / нетКлиент SAP ODBC
?
sqlanywhereСSybase SQL Anywhere. Должно работать надежно, так как основано на драйвере ODBC.Да / нетODBC-клиент SQL Anywhere
?
SQLiteВSQLite.и-
Unix и Windows.
sqlitepoВПортативный драйвер SQLite. Это связано с тем, что режим Assoc работает не так, как другие драйверы в sqlite. А именно, при выборе (объединении) нескольких таблиц имена таблиц включаются в ассоциированные ключи в драйвере "sqlite".
В драйвере "sqlitepo" имена таблиц удаляются из возвращенных имен столбцов. Когда это приводит к конфликту, первое поле получает предпочтение.
и-
Unix и Windows.
SybaseСSybase.Да / нетКлиент Sybase
Unix и Windows.
sybase_aseСSybase ASE.Да / нетКлиент Sybase
Unix и Windows.
8. Примеры
Пример 1: SELECT
Задача: Соединиться с Access Northwind DSN, показать первые 2 колонки каждого ряда.
В этом примере мы создадим объект ADOCOnnection доступа к базе данных. Соединение Pconnet – постоянное. Каждый раз, когда мы хотим сделать запрос к базе данных – вызываем функцию ADOConnection.Execute(). Она возвращает объект ACORecordSet, который, фактически, является курсором, указывающим на текущую строку в массиве fields[]. Мы используем MovieNext() для передвижения по рядам.
Обратите внимание: Полезная функция, которая не используется в данном примере, SelectLimit(), позволяет ограничить количество запрашиваемых рядов.
include('adodb.inc.php'); # подключаем основную библиотеку ADOdb$conn = &ADONewConnection('access'); # создаем соединение$conn->PConnect('northwind');   # соединяемся с MS-Access, northwind DSN$recordSet = &$conn->Execute('select * from products');
if (!
$recordSet)
        print 
$conn->ErrorMsg();
else
while (!
$recordSet->EOF) {
        print 
$recordSet->fields[0].' '.$recordSet->fields[1].'<BR>';
        
$recordSet->MoveNext();
}
$recordSet->Close(); # необязательно$/conn->Close(); # необязательно
$recordSet возвращает записи текущего ряда из массива $recordSet->fields с числовыми индексами по номеру колонки (начиная с 0). мы используем функцию MoveNext() для перехода к следующему ряду. EOF устанавливается в TRUE, когда мы достигаем конца. Если происходит ошибка во время запроса, Execute() вернет FALSE вместо запрашиваемых данных.
Массив $recordSet->fields генерируется PHP расширением для работы с базой данных. Некоторые расширения дают только числовой индекс и не дают индекса по названию колонки. Чтобы вызвать индексацию по названию колонки, что является ассоциированным массивом, используйте функцию SetFetchMode. Каждый результат будет сохранен в соответствии с ее установками при создании результата функциями Execute или SelectLimit.
$db->SetFetchMode(ADODB_FETCH_NUM);$rs1 $db->Execute('select * from table');$db->SetFetchMode(ADODB_FETCH_ASSOC);$rs2 $db->Execute('select * from table');print_r($rs1->fields); # shows array([0]=>'v0',[1] =>'v1')print_r($rs2->fields); # shows array(['col1']=>'v0',['col2'] =>'v1')
Для получения общего количества возвращенных данных, используйте $recordSet->RecordCount()Помните, что эта функция может вернуть -1, в случае, если невозможно определить количество возвращенных рядов.
Пример 2: Расширенный SELECT с объектами полей
Делаем выборку из таблицы, показываем первые две колонки. Если вторая колонка – дата или тайм штамп, то переформатируем дату в американский формат.
include('adodb.inc.php'); # загружаем библиотеку ADOdb$conn = &ADONewConnection('access'); # создаем соединение$conn->PConnect('northwind'); # соединяемся с базой MS-Access, northwind dsn$recordSet = &$conn->Execute('select CustomerID,OrderDate from Orders');
if (!
$recordSet)
    print 
$conn->ErrorMsg();
else
while (!
$recordSet->EOF) {
    
$fld $recordSet->FetchField(1);
    
$type $recordSet->MetaType($fld->type);

    if ( 
$type == 'D' || $type == 'T')
        print 
$recordSet->fields[0].' '.
        
$recordSet->UserDate($recordSet->fields[1],'m/d/Y').'&lt;BR>';
    else
        print 
$recordSet->fields[0].' '.$recordSet->fields[1].'&lt;BR>';

    
$recordSet->MoveNext();
}
$recordSet->Close(); # не обязательно$conn->Close(); # не обязательно
В этом примере мы проверяем тип второй колонки функцией FetchField(). Эта функция возвращает объект как минимум с тремя полями:
  • name: имя колонки;
  • type: родной тип поля;
  • max_lenght: максимальная длина поля. Некоторые базы, например MySql, неправильно возвращают максимальную длину поля. В этих случаях max_leght будет выставлено в -1.
Далее, мы используем функцию MetaType(), чтобы перевести родной тип поля в родовой тип. В настоящее время определены следующие родовые типы:
  • C: текстовое поле, которое нужно показывать как тег <input type='text'>;
  • X: TeXt, большое текстовое поле, которое необходимо показывать как тег <textarea>;
  • B: Blobs, или бинарные объекты большого объема. Чаще всего – картинки;
  • D: Date, дата;
  • T: Timestamp, тайм штамп;
  • L: логическое поле (булевое (true/false) или бит);
  • I: Integer, целое число;
  • N: Numeric, включает автоприращение (autoincrement), число, число с точкой, реальное и целое число;
  • R: Serial, Включает serial, целые числа с автоприращением. Это работает в отдельных базах данных.
Если metatype имеет тип дата или тайм штамп, то мы печатаем его с использованием заданного пользователем формата в функцией UserDate(), которая конвертирует дату формата PHP SQL в формат, нужный пользователю. Другой вариант использования MetaType() - это приведение (проверка) формата данных перед помещением их в базу данных.
Пример 3: INSERT (вставка)
Вставляем строку в таблицу заказов, которая содержит даты и строки, требующие обработки перед вставкой в базу (слэширование). Например, здесь требует обработки слово John's.
include('adodb.inc.php'); # загружаем бибилиотеку ADOdb$conn = &ADONewConnection('access'); # создаем соединение$conn->PConnect('northwind'); # соединяемся с MS-Access, northwind dsn$shipto $conn->qstr("John's Old Shoppe");
$sql "insert into orders (customerID,EmployeeID,OrderDate,ShipName) ";$sql .= "values ('ANATR',2,".$conn->DBDate(time()).",$shipto)";

if (
$conn->Execute($sql) === false) {
    print 
'error inserting: '.$conn->ErrorMsg().'&lt;BR>';
}
В данном примере вы видите расширенные возможности даты, а также возможности по слэшированию строк в ADODBUnix тайм штамп (который является большим целым числом), соответственно, сформатирован в формат Access функцией DBDate(), а также были расставлены правельные эскейп последовательности для записи 'John's Old Shope' в базу.
Незабывайте обрабатывать ошибки функции Execute(). Она возвратит FALSE в случае ошибки. Текстовое сообщение о последней ошибке может быть показано функцией ErrorMsg()Внимание: php_track_errors должна быть включена, чтобы иметь возможность записать сообщение об ошибке.
Пример 4: Отладка
include('adodb.inc.php'); # загружаем библиотеку ADOdb$conn = &ADONewConnection('access'); # создаем соединение$conn->PConnect('northwind'); # соединяемся с MS-Access, northwind dsn$shipto $conn->qstr("John's Old Shoppe");$sql "insert into orders (customerID,EmployeeID,OrderDate,ShipName) ";$sql .= "values ('ANATR',2,".$conn->FormatDate(time()).",$shipto)";$conn->debug true;
if (
$conn->Execute($sql) === false) print 'error inserting';
В вышеприведенном примере мы включили отладку, установив debug = true. Это покажет вам SQL запрос перед тем, как его выполнить, а также покажет сообщение об ошибке (в случае ее возникновения). При отладке нет необходимости вызывать функцию ErrorMsg(). Для того, чтобы вывести на экран результат запроса смотрите пример использования функции rs2html.
Также прочитайте раздел Ручная обработка ошибок.
Пример 5: MySql и меню
Соединяемся с базой MySql agora, генерируем <select> на основе SQL запроса, где заголовок <option> - это первая колонка, а значение, содержащее строку для обращения к серверу, - вторая.
include('adodb.inc.php'); # загружаем библиотеку ADOdb$conn = &ADONewConnection('mysql');  # создаем соединение$conn->PConnect('localhost','userid','','agora');# соединяемся с MySQL, agora db$sql 'select CustomerName, CustomerID from customers';$rs $conn->Execute($sql);
print 
$rs->GetMenu('GetCust','Mary Rosli');
Здесь мы определяем меню по имени GetCust, и где опция Mary Rosli является выбранной. Смотрите GetMenu(). Также в нашем арсенале есть функции, которые возвращают результат в виде массива: GetArray(), и в виде ассоциированного массива: GetAssoc().
Пример 6: Подключение сразу к двум базам данных
include('adodb.inc.php'); # lзагружаем библиотеку ADOdb$conn1 = &ADONewConnection('mysql'); # создаем соединение$conn2 = &ADONewConnection('oracle'); # создаем соединение
$conn1->PConnect($server$userid$password$database);$conn2->PConnect(false$ora_userid$ora_pwd$oraname);
$conn1->Execute('insert ...');$conn2->Execute('update ...');
Пример 7: Генерация UPDATE и INSERT SQL запросов
Начиная с версии ADODB 4.56 поддерживается функция AutoExecute(), которая упрощает процедуры, выполняемые функциями-преобразователями GetInsertSQL() и GetUpdateSQL(). Например INSERT может быть выполнен следующим образом:
$record["firstname"] = "Bob"$record["lastname"] = "Smith"$record["created"] = time(); $insertSQL $conn->AutoExecute($rs$record'INSERT');
а UPDATE – так:
$record["firstname"] = "Caroline"$record["lastname"] = "Smith"# меняем фамилию Керолайн со Миранда на Смит$insertSQL $conn->AutoExecute($rs$record'UPDATE''WHERE id = 1');
Остальная часть данного описания устарела
ADODB 1.31 и более поздние версии поддерживают 2 новые функции: GetUpdateSQL() и GetInsertSQL(). Это позволит вам исполнять 'SELECT * FROM tablequery WHERE...', делать копию $rs->fields, изменить поля, и, затем, составить SQL запрос для автоматической вставки или обновления записи.
Мы покажем вам, каким образом эти функции могут использоваться для доступа к таблице со следующими полями: IDFirstNameLastNameCreated.
Прежде, чем вы можете воспользоваться данными функциями, вам необходимо инициализировать рекордсет, произведя выборку из таблицы. Идея принадлежит Jonathan Younger jyounger#unilab.com. Начиная с версии ADODB 2.42 вы можете передавать название таблицы вместо рекордсет в функцию GetInsertSQL(), и это позволит сгенерировать SQL запрос для этой таблицы.
#==============================================
# ПРИМЕР GetUpdateSQL() и GetInsertSQL()
#==============================================
include('adodb.inc.php');
include(
'tohtml.inc.php');
#==========================
# Этот код проверяет вставляемые данные
$sql "SELECT * FROM ADOXYZ WHERE id = -1"# Запрашиваем из базы пустой результат
$conn = &ADONewConnection("mysql"); # создаем соединение$conn->debug=1;$conn->PConnect("localhost""admin""""test"); # соединяемся с MySQL, testdb$rs $conn->Execute($sql); # Выполняем запрос и получаем пустой результат
$record = array(); # Инициализируем массив с данными для вставки

# Устанавливаем значения для колонок
# Обратите внимание, названия колонок регистрозависимы
$record["firstname"] = "Bob";$record["lastNamE"] = "Smith";$record["creaTed"] = time();
# Передаем пустой рекордсет и новые данные для вставки
# в функцию GetInsertSQL. Функция обрабатывает данные и возвращает
# полностью сформатированный SQL запрос для вставки.
$insertSQL $conn->GetInsertSQL($rs$record);
$conn->Execute($insertSQL); # Вставляем запись в базу данных

#==========================
# Этот код проверяет данные для обновления
$sql "SELECT * FROM ADOXYZ WHERE id = 1"# Запрашиваем обновляемые данные
$rs $conn->Execute($sql); # Выполняем запрос и получаем данные, подлежащие обновлению
$record = array(); # Инициализируем массив с данными для обновления

# Устанавливаем значения колонок
# Обратите внимание, названия колонок регистрозависимы
$record["firstname"] = "Caroline";$record["LasTnAme"] = "Smith"# Меняем фамилию Кэролайн с Миранды на Смит

# Передаем данные, подлежащие обновлению, и новые данные
# в функцию GetUpdateSQL. Функция обрабатывает данные и возвращает
# полностью сформатированный SQL запрос для обновления с корректным параметром WHERE.
# Если данных для изменения нет – функция вернет пустую строку.
$updateSQL $conn->GetUpdateSQL($rs$record);
$conn->Execute($updateSQL); # Обновляем запись в базе данных$conn->Close();
Пример 8: Организация постраничного вывода
Следующий код показывает как организовать простейший постраничный вывод.
include_once('../adodb.inc.php');
include_once(
'../adodb-pager.inc.php');session_start();
$db NewADOConnection('mysql');
$db->Connect('localhost','root','','xphplens');
$sql "select * from adoxyz ";
$pager = new ADODB_Pager($db,$sql);$pager->Render($rows_per_page=5);
В результате вы увидите что-то похожее на это:

|<   <<   >>   >|  
Я БЫИмяФамилияДата создания
36 область Тьюринг Сб 06, октябрь 2001 
37 Серена Williams Сб 06, октябрь 2001 
38 Ят Сун солнце Сб 06, октябрь 2001 
39 Вай хун Увидеть Сб 06, октябрь 2001 
40 Стивен Oey Сб 06, октябрь 2001 
Стр. 8/10

Количество рядов для вывода контролируется функцией Render(). Если вы не укажите никакого значения – по умолчанию будет выведено 10 записей.
Вы можете изменять названия колонок изменяя свой SQL запрос (поддерживается в большинстве баз данных):
$sql 'select id as "ID", firstname as "First Name",
               lastname as "Last Name", created as "Date Created"
               from adoxyz'
;
Вышеприведенный пример вы можете найти в примере adodb/tests/testpaging.php, включенном в пакет установки. Класс ADODB_Pager может быть адаптирован программистом для вывода вместо линков картинок, а белый фон – более подходящим цветом.
Также вы можете настроить показ html при помощи $pager->htmlSpecialChars = false.
Часть кода, приведенного здесь, выла написана Ivan Oliva и Cornel G.
Пример 9: Экспорт данных в CVS или с разделением табуляцией
В вашем распоряжение есть несколько вспомогательных функций, которые помогут вам экспортировать данные в CVSили в файл с разделителями в виде табуляции:
include_once('/path/to/adodb/toexport.inc.php');
include_once(
'/path/to/adodb/adodb.inc.php');
$db = &NewADOConnection('mysql');$db->Connect($server$userid$password$database);
$rs $db->Execute('select fname as "First Name", surname as "Surname" from table');

print 
"&lt;pre>";
print 
rs2csv($rs); # возвращает строку, CSV формат
print '&lt;hr>';
$rs->MoveFirst(); # Замечание: некоторые базы данных не поддерживают MoveFirstprint rs2tab($rs,false); # возвращает строку, разделитель - табуляция
# false == подавляет название полей на первой линии
print '&lt;hr>';$rs->MoveFirst();rs2tabout($rs); # выводит непосредственно на stdout (есть также функция rs2csvout)print "&lt;/pre>";
$rs->MoveFirst();$fp fopen($path"w");
if (
$fp) {
  
rs2csvfile($rs$fp); # записываем в файл (есть также функция rs2tabfile)
  
fclose($fp);
}
Перевод каретки или переход на новую линию заменены на пробелы. Названия колонок будут записаны самой первой линией. Строка будет содержать текст взятый в двойные кавычки с разделителями. Двойные кавычки будут взяты в двойные кавычки еще раз. Это необходимо, чтобы файл нормально импортировался в Exel.
Все, описанные выше, функции берут в качестве дополнительного параметра $addtitles, который по умолчанию выставлен в TRUE. Если его установить в FALSE – первая линия не будет содержать названия колонок.
Пример 10: Recordset фильтры
Иногда может потребоваться перед использованием сделать преобразование всех рядов в recordset. Для примера мы преобразуем все текстовые данные в верхний регистр:
include_once('adodb/rsfilter.inc.php');
include_once(
'adodb/adodb.inc.php');
// ucwords() каждый элемент в recordsetfunction do_ucwords(&$arr,$rs)
{
    foreach(
$arr as $k => $v) {
        
$arr[$k] = ucwords($v);
    }
}
$db NewADOConnection('mysql');$db->PConnect('server','user','pwd','db');
$rs $db->Execute('select ... from table');$rs RSFilter($rs,'do_ucwords');
Функция RSFilter принимает 2 параметра: recordset и название функции фильтра. Возвращает обработанный recordset с указателем на первом элементе. Функция фильтра принимает 2 параметра: текущий ряд как массив и объект recordset. Для будущей совместимости вы не должны использовать оригинальный объект recordset.
Пример 11: Умные транзакции
Старый способ сделать транзакцию требовал, чтобы вы использовали:
$conn->BeginTrans();$ok $conn->Execute($sql);
if (
$ok$ok $conn->Execute($sql2);
if (!
$ok$conn->RollbackTrans();
else 
$conn->CommitTrans();
Для большинства проектов этот способ очень сложен, потому что вы должны отслеживать статус ошибки. Умные транзакции намного проще. Вы запускаете умную транзакцию функцией StartTrans():
$conn->StartTrans();$conn->Execute($sql);$conn->Execute($Sql2);$conn->CompleteTrans();
CompleteTrans() обнаруживает возникшие SQL ошибки и делает обратную перемотку или Commit (подтверждение). Вы также можете вызвать обратную перемотку, даже если никакой ошибки не произошло используя функцию FailTrans()Обратите внимание, что обратная перемотка была сделана в CompleteTrans(), то в FailTrans() она сделана не будет.
$conn->StartTrans();$conn->Execute($sql);
if (!
CheckRecords()) $conn->FailTrans();$conn->Execute($Sql2);$conn->CompleteTrans();
Вы также можете проверить, была ли в процессе транзакции ошибка. Для этого воспользуйтесь функцией HasFailedTrans(). Она возвратит TRUE, если вызывалась функция FailTrans() или была ошибка при выполнении SQLзапроса. Убедитесь, что вы вызываете функцию HasFailedTrans() перед CompleteTrans(), потому что она выдает результат только между StartTrans/CompleteTrans().
И, наконец, StartTrans/CompleteTrans могут быть вложенными и только самый удаленный блок выполнен. Функции BeginTrans/CommitTrans/RollbackTrans, напротив, НЕ МОГУТ быть вложенными.
$conn->StartTrans();$conn->Execute($sql);
  
$conn->StartTrans();    # игнорируется
  
if (!CheckRecords()) $conn->FailTrans();
  
$conn->CompleteTrans(); # игнорируется$conn->Execute($Sql2);$conn->CompleteTrans();
Обратите внимания, точки сохранения (точки сохранения) на данный момент не поддерживаются.