В этом материале разберём основные методы для работы с данными в PDO .

PDO. Часть 2.

В этом материале разберём основные методы для работы с данными в PDO.

Для начала давайте установим соединение с нашей базой данных MySQL.

$host = 'localhost'; // хост
$dbname = 'test'; // название базы
$user = "admin"; // логин пользователя
$pass = 123; // пароль
$db = new PDO("mysql:host=$host;dbname=$db", $user, $password);

В результате, в $db попадёт объект, используя который мы сможем работать с нашей базой. Давайте этим и займёмся.

К примеру, мы хотим что-нибудь вставить, тогда будем использовать метод exec.

$sql = "INSERT INTO(login, password) VALUES($login, $password)";
$res = $db->exec($sql);

Наш запрос будет выполнен, а в переменную $res попадёт количество затронутых строк.

exec выполняет запросы, но не может получить данные из БД, этим занимается метод query.

$sql = "SELECT login FROM users"; $res = $db->query($sql);

Однако не стоит забывать про безопасность и про то, что данные нужно проверять. Для этого раньше нам нужно было сделать примерно следующее:

$sql = "SELECT * FROM users WHERE login = $login";
$login = $_POST["login"];
$login = mysql_real_escape_string($login); // MySQL
$login = sqlite_escape_string($login); // sqlite
$login = pg_escape_string($login); // PostgreSQL

Теперь за нас всё сделает PDO и его метод quote.

$login = $db->quote($login);
$result = $db->query($sql);

Чтобы преобразовать вернувшийся результат в массив, мы использовали функции mysqli_fetch_assoc() для ассоциативного и mysqli_fetch_num() для нумерованного массива. Посмотрим, как это делается в PDO.

$stmt = $db->query($sql);

$res = $stmt->FETCH(PDO::FETCH_ASSOC); // ассоциативный

$res = $stmt->FETCH(PDO::FETCH_NUM); // нумерованный

$res = $stmt->FETCH(PDO::FETCH_BOTH); // ассоциативный и нумерованный вместе

$res = $stmt->FETCH(PDO::FETCH_OBJ); // объектный тип

$res = $stmt->FETCH(PDO::FETCH_LAZY); // сразу все типы

Думаю, тут всё понятно. Мы просто вызываем метод FETCH и передаём туда соотвествующую константу. В использовании проблем возникнуть так же не должно.

echo $res["name"]; // ассоциативный

echo $res[0]; // нумерованный

echo $res->name; // объектный

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

Метод FETCH возвращает одну запись, а чтобы получить все, нам следует использовать FETCHALL.

$stmt = $db->query("SELECT * FROM users");
$res = $stmt->FETCHALL(PDO::FETCH_ASSOC);
foreach($res as $arr) {
  echo $arr["name"]."<br>";
}

Тут пояснять нечего. Давайте лучше поговорим про константу FETCH_CLASS. Эта константа позволяет нам заполнить наш класс данными, полученными из БД.

class User {

  public $login;
  public $pass;

  public function showInfo() {
   echo "<b>".$this->pass."</b>"." : ".$this->login."<br>";
  }
}

$db = new PDO("mysql:host=localhost;dbname=test", "root", "");
$stmt = $db->query("SELECT * FROM `users`");
$result = $stmt->FETCHALL(PDO::FETCH_CLASS, "User");

foreach($result as $user) {
  $user->showInfo();
}

В методе FETCHALL мы указываем константу FETCH_CLASS, а затем название класса в кавычках. После мы перебираем объект с результатом с помощью цикла foreach и выводим информацию. Главное помните, что названия свойств в классе обязаны быть такими же, как и названия полей в базе данных.

Сегодня разобрали основные способы работы с базой данных, а в следующей статье перейдём к уже более сложным, но интересным фишкам PDO.