Рубрики
Uncategorized

Подробное простое руководство по PHP PDO

Автор оригинала: David Wong.

Около 80% веб-приложений поддерживаются PHP. Точно так же, как и SQL. До PHP 5.5 у нас были команды mysql_command для доступа к базам данных MySQL, но в конечном итоге они были отброшены из-за отсутствия безопасности.

Отказ произошел на PHP 5.5 в 2013 году. Я написал эту статью в 2018 году, и версия PHP была 7.2. Отказ от mysql_ вызывает два основных метода доступа к базам данных: библиотеки mysqli и PDO.

Хотя библиотека mysqli официально обозначена, PDO получила больше похвал, потому что mysqli может поддерживать только базу данных MySQL, в то время как PDO может поддерживать 12 различных типов драйверов баз данных. Кроме того, PDO обладает другими функциями, которые делают его лучшим выбором для большинства разработчиков. Вы можете увидеть некоторые сравнения в следующей таблице:

12 водителей Только MySQL Поддержка баз данных
ООП Процесс + ООП Пример
Да Нет Оператор предварительной обработки (на стороне клиента)
Да Нет 1 Именованный параметр

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

Подключить

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

Первое, что нам нужно сделать, это определить хост, имя базы данных, имя пользователя, пароль и набор символов базы данных.

$host = 'localhost';
$db  = 'theitstuff';
$user = 'root';
$pass = 'root';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$conn = new PDO($dsn, $user, $pass);

Позже, как вы можете видеть в приведенном выше коде, мы создали переменную DSN, которая является просто переменной, содержащей информацию о базе данных. Для некоторых пользователей, работающих с MySQL на внешних серверах, вы также можете настроить номер порта, указав port=$port_number.

Наконец, вы можете создать экземпляр класса PDO. Я использую переменную $conn и предоставляю параметры $dsn, $user, $pass. Если вы выполните эти действия, теперь у вас должен быть объект с именем $conn, который является экземпляром класса подключения PDO. Теперь пришло время зайти в базу данных и выполнить несколько запросов.

Простой SQL-запрос

Теперь давайте выполним простой SQL-запрос.

$tis = $conn->query('SELECT name, age FROM students');
while ($row = $tis->fetch())
{
 echo $row['name']."\t";
 echo $row['age'];
 echo "
"; }

Это самая простая форма выполнения запросов с использованием PDO. Сначала мы создали переменную с именем t is (сокращенно IT-материал), а затем вы можете видеть, что мы использовали функцию запроса в созданном объекте $conn.

Затем мы запускаем цикл while и создаем переменную $row для извлечения содержимого из объекта $this и, наконец, отображаем каждую строку, вызывая имя столбца.

Это просто, не так ли? Теперь давайте рассмотрим инструкции предварительной обработки.

Оператор предварительной обработки

Предварительно обработанные инструкции являются одной из основных причин, по которой люди начинают использовать PDO, поскольку они предоставляют инструкции, которые могут предотвратить внедрение SQL.

Есть два основных способа их использования. Вы можете использовать параметры местоположения или именованные параметры.

Параметр положения

Давайте рассмотрим пример запроса с использованием параметров местоположения.

$tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(?, ?)");
$tis->bindValue(1,'mike');
$tis->bindValue(2,22);
$tis->execute();

В приведенном выше примере мы ставим два вопросительных знака, а затем используем функцию bindValue () для сопоставления значений с запросом. Эти значения привязаны к позиции в вопросительном знаке оператора.

Я также могу использовать переменные вместо прямого предоставления значений. Тот же пример с использованием функции bindParam () выглядит следующим образом:

$name='Rishabh'; $age=20;
$tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(?, ?)");
$tis->bindParam(1,$name);
$tis->bindParam(2,$age);
$tis->execute();

Именованный параметр

Именованные параметры также являются предварительно обработанными операторами, которые сопоставляют значения/переменные с именованными местоположениями в запросах. Поскольку привязки к местоположению нет, она очень эффективна при выполнении нескольких запросов с использованием одной и той же переменной.

$name='Rishabh'; $age=20;
$tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(:name, :age)");
$tis->bindParam(':name', $name);
$tis->bindParam(':age', $age);
$tis->execute();

Вы можете заметить, что единственное изменение заключается в том, что я использую: имя и: возраст в качестве заполнителей, а затем сопоставляю переменные с ними. Двоеточие используется перед параметром, поэтому PDO важно знать, что местоположение является переменной.

Вы также можете использовать функцию bindValue () для отображения значений напрямую с помощью именованных параметров.

получить данные

PDO очень богат на сбор данных. На самом деле он предоставляет множество форматов для извлечения данных из базы данных.

Вы можете использовать PDO:: FETCH_ASSOC для получения ассоциативных массивов, PDO:: FETCH_NUM для получения цифровых массивов и PDO:: FETCH_OBJ для получения массивов объектов.

$tis = $conn->prepare("SELECT * FROM STUDENTS");
$tis->execute();
$result = $tis->fetchAll(PDO::FETCH_ASSOC);

Вы можете видеть, что я использовал fetchAll, потому что мне нужны были все соответствующие записи. Если вам нужна только одна строка, вы можете просто использовать fetch.

Теперь, когда у нас есть данные, пришло время зациклить их, что очень просто.

foreach ($result as $lnu){
 echo $lnu['name'];
 echo $lnu['age']."
"; }

Как вы можете видеть, поскольку я запросил ассоциативный массив, я обращаюсь к членам по имени.

Хотя нет никаких требований для определения того, как вы хотите передавать данные, вы действительно можете установить для переменной $conn значение по умолчанию при определении самой себя.

Все, что вам нужно сделать, это создать массив $options, в который вы можете поместить все конфигурации по умолчанию, просто передав массив в переменную $conn.

$options = [
 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$conn = new PDO($dsn, $user, $pass, $options);

Это очень краткое и быстрое введение в PDO, и вскоре мы подготовим расширенный учебник. Если у вас возникнут какие-либо трудности с пониманием какой-либо части этого руководства, пожалуйста, дайте мне знать в разделе комментариев, где я отвечу за вас.

Выше приведено все содержание этой статьи. Я надеюсь, что это будет полезно для изучения каждого, и я надеюсь, что вы будете больше поддерживать разработчика.