Функции доступа к базам данных в 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) данных, которые очень быстро могут модернизироваться под потребности различных баз данных. Также существуют методы для обработки дат, конкатенации строк и экранирования строк по правилам различных баз данных. * Система мето-типов построена так, чтоб вы могли быть уверенными, что сохраняемые вами данные, например CHAR, TEXT, STRING, будут одинаковыми для всех баз данных. * Легкая переносимость, потому что все низкоуровневые функции вынесены отдельно и вам нет необходимости вносить изменения в ядро класса. * Переносимость на уровне создания таблиц и индексов. * Контроль работы базы данных и тонкая настройка производительности. * Поддержка сессии на уровне базы данных, поддержка истечения времени сессии и уведомлений.
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 <pre>; print_r($rs->GetRows()); print </pre>;
3.1 Минимальная установка
Для разработчиков, которые нуждаются в минимальном наборе функций, рекомендуем установить следующие файлы:
* 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 (определяет специфические для конкретной базы данных функции).
Всякий раз, как вы соединяетесь с базой данных, создается новый объект (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: $driver://$username:$password@hostname/$database?options[=value]
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:
* Для всех движков баз: persist, persistent, debug, fetchmode * Для Interbase/Firebird: dialect,charset,buffers,role * Для Msoft ADO: charpage * Для MySQL: clientflags * Для MySQLi: port, socket, clientflags * Для Oci8: nls_date_format
Для всех драйверов справедливо: если вы задали установить постоянное и непостоянное соединения одновременно – будет установлено постоянное соединение. Debug – включает отладку. Fetchmode – вызывает функцию SetFetchMode().Если вы не указали никакого значение, то значение будет выставлено в 1.
ADODB DSN совместимы с версией 1.0 формата PEAR DBs DSN Format.
3.3 Примеры соединения с базами данных
MySql и большинство других баз данных
Mysql соединение имеет очень простой формат и параметры аналогичны mysql_connect:
# или 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). Исключения будут описаны ниже.
$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;
$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
Oracle (oci8)
С oci8 вы можете устанавливать соединение множеством способов. Обратите внимание, что способы работы с oci8 прекрасно подходят и для более новых версий Oracle (9i и 10g).
а) PHP и Oracle находятся на одной машине, используют SID поумолчанию:
$conn->Connect(false, scott, tiger);
б) TSN Name определяется в файле tnsnames.ora (или ONAMES, или HOSTNAMES), аналогично myTNS:
ODBC DSNы могут быть созданы в панели настроек ODBC, или вы можете использовать DSN-less соединения. Для использования DSN-less соединений с ODBC вам понадобится PHP версии 4.3 или выше.
Если вы используете PHP версии меньше, чем 4.3.0, то DSN-less соединения будут работать только с Microsofts ADO, через, основанное на Microsoft COM, API. Пример использования библиотеки ADODB и Microsofts ADO: