- 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.


