PDO (объект данных PHP) — это новая вещь в PHP 5. Когда PHP 6 будет выпущен, PHP 6 по умолчанию использует только PDO для обработки базы данных и переместит все расширения базы данных в PECL, поэтому значение по умолчанию больше не используется. .php_mysql.dll и тому подобное, что мне делать? Мы можем только идти в ногу со временем, поэтому я попробовал PDO. (Эта статья только начального уровня, эксперты могут ее пропустить, ха-ха)
[Что такое PDO]
PDO — это важная новая функция, добавленная в PHP 5, потому что до PHP 5 в php4/php3 было множество расширений базы данных для взаимодействия с каждым Подключение и обработка базы данных, php_mysql.dll, php_pgsql.dll, php_mssql.dll, php_sqlite.dll и другие расширения для подключения MySQL, PostgreSQL, MS SQL Server, SQLite, аналогично необходимо использовать ADOdb, PEAR::DB, PHPlib: :Абстрактные классы базы данных, такие как DB, чрезвычайно громоздки и неэффективны, чтобы помочь нам. В конце концов, как эффективность PHP-кода может быть настолько высокой, что мы можем напрямую писать его на C/C++? Поэтому появление PDO неизбежно. Каждый должен относиться к его использованию со спокойным отношением к обучению. Возможно, вы обнаружите, что это может сэкономить вам много усилий.
[Установка PDO]
Я использую Windows XP SP2, поэтому весь процесс выполняется в Windows. Что касается Linux/FreeBSD и других платформ, пожалуйста, найдите информацию и настройте установку самостоятельно.
У меня PHP 5.1.4, который уже поставляется с расширением php_pdo.dll, но перед его использованием требуется небольшая настройка.
Откройте c:windowsphp.ini, который является моим файлом конфигурации PHP, и найдите следующую строку:
Extension_dir
Это каталог, в котором находится мое расширение PHP 5: C:php5ext, тогда я это сделаю. Измените эту строку на:
Extension_dir = "C:/php5/ext"
и затем найдите ее в php.ini:
;;;;;;;;;;;;;;;;;;;;;;;;;;
; Динамические расширения;
;;;;;;;;;;;;;;;;;;;;;;
Ниже приведено множество вещей, похожих на ;extension=php_mbstring.dll. Вот конфигурация для загрузки расширения PHP. добавьте его в конец. Наше расширение PDO:
Extension=php_pdo.dll.
расширение = php_pdo_mysql.dll
расширение = php_pdo_pgsql.dll
расширение = php_pdo_sqlite.dll
расширение = php_pdo_mssql.dll
расширение = php_pdo_odbc.dll
расширение = php_pdo_firebird.dll
;extension=php_pdo_oci8.dll
Можно добавить различные драйверы PDO, но следующий php_pdo_oci8.dll, поскольку я не установил базу данных Oralce, не имеет этого, поэтому я использую точку с запятой, чтобы закомментировать его. Затем перезапустите наш веб-сервер IIS/Apache, у меня IIS, эй, вы смотрите на меня свысока, в Windows это легко.
После перезапуска напишите файл phpinfo.php в каталоге документов нашего веб-сервера и добавьте следующее:
<?
phpинформация();
?>
Затем откройте наш любимый браузер: IE/FireFox, у меня FireFox 2.0, я только что скачал его, он великолепен, я не боюсь мошеннического программного обеспечения, хаха.
Введите в браузере: http://localhost/phpinfo.php . Если ваш путь к этой странице не соответствует, введите его самостоятельно.
В выходном содержимом, если вы его успешно видите:
PDO
Поддержка PDO включена
Драйверы PDO mysql, pgsql, sqlite, mssql, odbc, firebird
Сзади приведены различные инструкции по драйверам: PDO_Firebird, pdo_mssql, pdo_mysql, PDO_ODBC, pdo_pgsql, pdo_sqlite.
Затем поздравляем с успешной установкой, в противном случае внимательно проверьте приведенные выше шаги. .
[Быстрый тест]
Я использую MySQL 4.0.26, но лично я рекомендую всем использовать MySQL 4.1.x или MySQL 5.0.x, потому что в этих версиях есть много интересного, о чем стоит узнать. Нашему PDO необходимо подключиться к моему MySQL 4.0. Если вы не установили MySQL, установите его самостоятельно. Мы установили MySQL и добавили в тестовую библиотеку таблицу foo, включающую четыре поля, такие как идентификатор, имя, пол и время.
Мы начали создавать первое приложение PDO и создали файл pdo.php в каталоге веб-документов:
<?php
$dsn = "mysql:host=localhost;dbname=test";
$db = новый PDO($dsn, 'root', '');
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()");
эхо $счет;
$дб = ноль;
?>
Я не понимаю, что это значит, давайте объясним потихоньку. Эта строка:
$dsn = "mysql:host=localhost;dbname=test";
предназначена для создания нашего DSN (источника данных). Посмотрите на информацию внутри: тип базы данных — mysql, адрес хоста — localhost, а имя базы данных. это тест. Всего несколько фрагментов информации. Методы построения источников данных в разных базах данных различны.
$db = new PDO($dsn, 'root', '');
Первый параметр конструктора — это наш источник данных, второй — пользователь, подключающийся к серверу базы данных, а третий параметр — пароль. . Мы не можем гарантировать, что соединение пройдет успешно. Об исключениях мы поговорим позже. Здесь мы предполагаем, что соединение прошло успешно.
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()");
echo $count;
вызывает наш успешно подключенный объект PDO для выполнения запроса. Этот запрос представляет собой операцию по вставке записи. Использование метода PDO::exec() вернет результат, который влияет на запись, поэтому мы выводим этот результат. Наконец, вам все равно нужно завершить ресурс объекта:
$db = null;
По умолчанию это не длинное соединение. Если вам нужно длинное соединение с базой данных, вам нужно добавить последний параметр: array(PDO::ATTR_PERSISTENT). => true). Это выглядит так:
$db = new PDO( $dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true));
Это такая простая операция. от предыдущего, но чем-то похож на ADOdb.
[Продолжить изучение]
Если мы хотим извлечь данные, нам следует использовать функцию сбора данных. ($db, использованный ниже, представляет собой все объекты, подключенные выше)
<?php
foreach($db->query("SELECT * FROM foo")){
print_r ($ строка);
}
?>
Мы также можем использовать этот метод получения:
<?php
$rs = $db->query("SELECT * FROM foo");
while($row = $rs->fetch()){
print_r ($ строка);
}
?>
Если вы хотите поместить все данные в массив одновременно, вы можете сделать это:
<?php
$rs = $db->query("SELECT * FROM foo");
$result_arr = $rs->fetchAll();
print_r ($result_arr);
?>
Массив
([0] => Массив(
[идентификатор] => 1
[0] => 1
[имя] => хейелурен
[1] =>хейелурен
[пол] =>Мужской[2] =>Мужской[время] =>2006-10-28 23:14:23
[3] => 2006-10-28 23:14:23
)
}
Давайте посмотрим на записи внутри. Здесь есть как цифровые индексы, так и связанные индексы, а это пустая трата ресурсов. Нам нужен только связанный индекс:
<?php.
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
$rs = $db->query("SELECT * FROM foo");
$rs->setFetchMode(PDO::FETCH_ASSOC);
$result_arr = $rs->fetchAll();
print_r ($result_arr);
?>
Посмотрите на приведенный выше код, метод setAttribute() предназначен для установки некоторых атрибутов. Основные атрибуты: PDO::ATTR_CASE, PDO::ATTR_ERRMODE и т. д. Здесь нам нужно установить PDO::ATTR_CASE, то есть. , мы используем связанный индекс для получения данных. При настройке существует несколько вариантов того, будет ли связанный индекс прописным или строчным:
PDO::CASE_LOWER -- Принудительно переводить имя столбца в нижний регистр PDO::CASE_NATURAL -- Имя столбца будет иметь вид исходным способом PDO::CASE_UPPER -- Заставьте имя столбца быть в верхнем регистре.
Мы используем метод setFetchMode, чтобы установить тип возвращаемого значения для получения набора результатов. Те же типы:
PDO::FETCH_ASSOC -- форма ассоциативного массива PDO. ::FETCH_NUM -- форма числового индексного массива PDO::FETCH_BOTH -- обе формы массива. Да, это PDO::FETCH_OBJ по умолчанию - в форме объекта, аналогичного предыдущему mysql_fetch_object().
Конечно, обычно мы. используйте PDO::FETCH_ASSOC. Что именно использовать, зависит от ваших собственных потребностей. Другие приобретения Введите справочное руководство.
Помимо вышеописанного способа получения данных существует еще такой способ:
<?php
$rs = $db->prepare("SELECT * FROM foo");
$rs->выполнить();
while($row = $rs->fetch()){
print_r ($ строка);
}
?>
На самом деле, это почти то же самое. Если вы хотите получить результаты поля в указанной записи, вы можете использовать PDOStatement::fetchColumn():
<?php
$rs = $db->query("SELECT COUNT(*) FROM foo");
$col = $rs->fetchColumn();
эхо $столбец;
?>
Обычно функция fetchColumn() используется для получения статистики подсчета, а некоторые записи, требующие только одного поля, просты в использовании.
Кратко суммируя вышеперечисленные операции:
операции запроса — это в основном PDO::query(), PDO::exec() и PDO::prepare(). PDO::query() в основном используется для операций, возвращающих записанные результаты, особенно операций SELECT. PDO::exec() в основном используется для операций, которые не возвращают набор результатов, таких как INSERT, UPDATE, DELETE и других операций. Он возвращает результат — количество столбцов, затронутых текущей операцией. PDO::prepare() — это в основном операция предварительной обработки. Вам нужно использовать $rs->execute() для выполнения оператора SQL в предварительной обработке. Этот метод может связывать параметры и является относительно мощным. Его невозможно объяснить просто в этой статье. .Все Вы можете обратиться к руководствам и другой документации. Основными операциями получения набора результатов являются: PDOStatement::fetchColumn(), PDOStatement::fetch(), PDOStatement::fetchALL(). PDOStatement::fetchColumn() — это поле первой записи, указанной в результате выборки. По умолчанию используется первое поле. PDOStatement::fetch() используется для получения записи, а PDOStatement::fetchAll() — для получения всех наборов записей в один. Для получения результатов вы можете установить тип требуемого набора результатов через PDOStatement::setFetchMode. .
Есть также две сопутствующие операции: PDO::lastInsertId() и PDOStatement::rowCount(). PDO::lastInsertId() возвращает последнюю операцию вставки, а типом столбца первичного ключа является последний идентификатор автоинкремента. PDOStatement::rowCount() в основном используется для набора результатов, на который влияют операции DELETE, INSERT и UPDATE PDO::query() и PDO::prepare(), и недопустим для метода PDO::exec(). и операции SELECT.
[Обработка ошибок]
Что делать, если вы столкнулись с ошибкой в программе? Здесь мы описываем информацию об ошибках и обработку исключений класса PDO.
1. Объектно-ориентированный подход
Давайте сначала посмотрим, как бороться с ошибками соединения и т. д., и воспользуемся объектно-ориентированным подходом для их обработки:
<?php.
пытаться {
$db = новый PDO('mysql:host=localhost;dbname=test', $user, $pass);
$дб = ноль;
} catch (PDOException $e) {
напечатать «Ошибка:» $e->getMessage() «<br/>»;
умереть();
}
?>
Здесь мы используем объектно-ориентированную функцию обработки исключений PHP 5. Если есть исключение, мы инициализируем его, вызывая PDOException для инициализации класса исключения.
Структура атрибутов класса исключений PDOException:
<?php
класс PDOException расширяет исключение
{
public $errorInfo = null; // Для получения информации об ошибке вы можете вызвать PDO::errorInfo() или PDOStatement::errorInfo() для доступа к защищенному $message // Для получения информации об исключении вы можете попробовать Exception::getMessage() для access protected $code ; // код ошибки состояния SQL, доступ к которому можно получить с помощью Exception::getCode()
}
?>
Этот класс обработки исключений интегрирован со встроенным классом обработки исключений PHP 5. Давайте кратко рассмотрим структуру встроенного класса обработки исключений PHP 5:
<?php
классException
{
//Свойство защищено $message = 'Неизвестное исключение'; //Сообщение об исключении защищено $code = 0 //Код исключения, определяемый пользователем, protected $file; //Имя файла, в котором произошло исключение, protected $line; где произошло исключение Номер строки
// Метод Final function getMessage(); // Возвращаем информацию об исключении. Final function getCode() // Возвращаем код исключения. Final function getFile(); // Возвращаем имя файла, в котором произошло исключение. Final function getLine; (); // Возвращаем номер строки кода, в которой произошло исключение. Final function getTrace(); // массив backtrace(). Final function getTraceAsString() // информация getTrace(), отформатированная в строку.
}
?>
Соответственно, методы getFile() и getLine() могут быть соответствующим образом вызваны в коде для поиска ошибок и повышения удобства отладки.
2. Используйте процессно-ориентированный подход,
чтобы сначала просмотреть код:
<?
$db = новый PDO('mysql:host=localhost;dbname=test', $user, $pass);
$rs = $db->query("ВЫБРАТЬ aa,bb,cc FROM foo");
if ($db->errorCode() != '00000'){
print_r($db->errorInfo());
Выход;
}
$arr = $rs->fetchAll();
print_r ($ обр);
$дб = ноль;
?>
Объекты PDO и PDOStatement имеют методы errorCode() и errorInfo(). Если ошибок нет, errorCode() возвращает: 00000, в противном случае будут возвращены некоторые коды ошибок. errorInfo() возвращает массив, включая коды ошибок, определенные кодами ошибок PHP и MySQL, а также информацию об ошибках. Структура массива следующая:
Массив.
(
[0] => 42S22
[1] => 1054
[2] => Неизвестный столбец «aaa» в «списке полей»
)
После выполнения каждого запроса результат errorCode() является самым последним, поэтому мы можем легко сами контролировать отображение сообщения об ошибке.
[Простое резюме]
Из приведенного выше использования мы видим, что PDO действительно мощный инструмент. Есть также некоторые другие вещи, о которых я не упомянул, такие как параметры привязки, предварительная обработка, хранимые процедуры, обработка транзакций и другие функции. Кроме того, существуют различные структуры DSN расширения данных. Сама база данных Oracle имеет множество особенностей, которые требуют углубленного изучения и понимания. В этой статье лишь кратко описаны некоторые вводные знания, которые можно рассматривать как простое понимание PDO.