- PDO, подключение к базе данных
- PDO, получение (чтение) и вывод данных из БД
- PDO, создаем таблицу
- PDO, вставка новых записей в таблицу (БД)
- PDO, обновление существующих записей в таблице
- PDO, удаление записей из таблицы
PDO, подключение к базе данных
Подключение к БД с помощью PDO выглядит так:
<?php $dbcon = new PDO('mysql:host=localhost;dbname=dbName', $dbUsername, $dbPassword);
Думаю из названия переменных ясно, что и куда подставлять.
Для обнаружения ошибок будем использовать методы try/catch:
<?php try { $dbcon = new PDO('mysql:host=localhost;dbname=dbName', $dbUsername, $dbPassword); $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo 'Ошибка: ' . $e->getMessage(); }
PDO::ERRMODE_EXCEPTION
- выводить исключения, когда они произойдут.
PDO, получение (чтение) и вывод данных из БД
В PDO получить данные можно двумя способами (методами):
- query
- execute
Разберем оба.
Чтение и вывод данных с помощью query
Сразу к примеру:
<?php $q = 'кодер.укр'; try { //соединение с БД $dbcon = new PDO('mysql:host=localhost;dbname=dbName', $dbUsername, $dbPassword); $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //получаем данные $data = $dbcon->query('SELECT * FROM tableName WHERE fieldName = ' . $dbcon->quote($string)); //выводим результат foreach($data as $rows) { print_r($rows); } } catch(PDOException $e) { echo 'Ошибка: ' . $e->getMessage(); }
$dbcon->quote
- метод аналогичный mysql_real_escape_string
, для экранирования данных.
Еще один пример:
<?php $q = 'кодер.укр'; try { //соединение с БД $dbcon = new PDO('mysql:host=localhost;dbname=dbName', $dbUsername, $dbPassword); $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //получаем данные $data = $dbcon->query('SELECT * FROM tableName'); //выводим результат foreach ($dbcon->query($sql) as $row) { echo " ID: ".$row['ID'] . "<br />"; echo " Name: ".$row['name'] . "<br />"; echo " Other field: ".$row['otherField'] . "<br />"; } } catch(PDOException $e) { echo 'Ошибка: ' . $e->getMessage(); }
Чтение и вывод данных с помощью execute
Пример:
<?php $q = 'кодер.укр'; try { //соединение с БД $dbcon = new PDO('mysql:host=localhost;dbname=dbName', $dbUsername, $dbPassword); $data = $dbcon->prepare('SELECT * FROM tableName WHERE fieldName = :q'); $data->execute(array('q' => $q)); $result = $data->fetchAll(); if (count($result)) { //выводим результат foreach($result as $row) { print_r($row); } } else { echo "Нет записей для вывода"; } } catch(PDOException $e) { echo 'Ошибка: ' . $e->getMessage(); }
Здесь мы работаем с методом prepare
. Это сводит к минимуму возможность SQL инъекции. Так как $q
не попадет непосредственно в запрос, а в запросе используем заполнитель :q
.
Так же выводить данные можно следующим образом:
while($row = $data->fetch(PDO::FETCH_OBJ)) { print_r($row); }
PDO::FETCH_OBJ
- создает анонимный объект со свойствами, которые соответствуют именам столбцов запроса.
PDO::FETCH_ASSOC
- вернет массив, индексированный именами столбцов запроса.
PDO::FETCH_BOTH
- возвращает массив, индексированный именами столбцов запроса, а также их номерами (начиная с 0). Используется по умолчанию.
PDO::FETCH_NUM
- возвращает массив, индексированный номерами столбцов (начиная с 0).
PDO, создаем таблицу
<?php try { //соединение с БД $dbcon = new PDO('mysql:host=localhost;dbname=dbName', $dbUsername, $dbPassword); //запрос на создание таблицы $sql = "CREATE TABLE `tableName` ( `ID` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(40) NOT NULL, `otherField` VARCHAR(40) NOT NULL, PRIMARY KEY (`ID`)) "; $dbcon->exec($sql); echo "Таблица tableName готова к использованию."; } catch(PDOException $e) { echo 'Ошибка: ' . $e->getMessage(); }
PDO, вставка новых записей в таблицу (БД)
Добавляем запись в таблицу:
<?php try { //соединение с БД $dbcon = new PDO('mysql:host=localhost;dbname=dbName', $dbUsername, $dbPassword); $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $data = $dbcon->prepare('INSERT INTO tableName VALUES(:fieldName)'); $data->bindParam(':fieldName', $fieldData); $fieldData= 'Нужные данные'; $data->execute(); } catch(PDOException $e) { echo 'Ошибка: ' . $e->getMessage(); }
Добавляем несколько записей подряд в таблицу:
<?php try { //соединение с БД $dbcon = new PDO('mysql:host=localhost;dbname=dbName', $dbUsername, $dbPassword); $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $data = $dbcon->prepare('INSERT INTO tableName VALUES(:fieldName)'); $data->bindParam(':fieldName', $fieldData); $fieldData= 'Нужные данные'; $data->execute(); $fieldData= 'Нужные данные 2'; $data->execute(); $fieldData= 'Нужные данные 3'; $data->execute(); } catch(PDOException $e) { echo 'Ошибка: ' . $e->getMessage(); }
PDO, обновление существующих записей в таблице
Пример обновления записей:
<?php //данные для вставки $id = 1; $name = "Новое имя"; try { $dbcon = new PDO('mysql:host=localhost;dbname=dbName', $dbUsername, $dbPassword); $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $data = $dbcon->prepare('UPDATE tableName SET name = :name WHERE id = :id'); $data->execute(array( ':id' => $id, ':name' => $name )); echo $data->rowCount(); //выведет: 1 } catch(PDOException $e) { echo 'Ошибка: ' . $e->getMessage(); }
PDO, удаление записей из таблицы
Последний пример, удаление записей из таблицы:
<?php $id = 1; try { $dbcon= new PDO('mysql:host=localhost;dbname=dbName', $dbUsername, $dbPassword); $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $data = $dbcon->prepare('DELETE FROM tableName WHERE id = :id'); $data->bindParam(':id', $id); $data->execute(); echo $data->rowCount(); //выведет: 1 } catch(PDOException $e) { echo 'Ошибка: ' . $e->getMessage(); }
Я описал основные способы работы с базой данных через PDO, для более детального изучения можно почитать документацию: http://php.net/manual/en/book.pdo.php.
Комментарии
Отличная шпаргалка, если что-то забыл)
Ответить