not-remember
6/21/2018 - 6:10 AM

Database PDO

Основные моменты работы с PDO выражениями.

<?php

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
	$opt = [
		PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
		PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
		PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
		PDO::ATTR_EMULATE_PREPARES   => false,
	];
	try {
		$pdo = new PDO($dsn, $user, $pass, $opt);
	} catch (PDOException $e) {
		die('Подключение не удалось: ' . $e->getMessage());
	}
	
/*--------------------------------------Выборка из БД без внешних параметров-----------------------------------------*/

  	$stmt = $pdo->query('SELECT * FROM `faculties`');
  	while ($row = $stmt->fetch()) // выбираем данные из ответа, построчно (по рядам полученой в ответе таблицы)
  		$mass[] = $row[<имя столбца>];
	
/*------------------------------------------Выборка из БД по параметру----------------------------------------------*/

	// Создаем PDO запрос с одним неименованным параметром, который будет подставлен вместо знака "?"
	  $stmt = $pdo->prepare('SELECT hash FROM `access_keys` WHERE `hash` = ? LIMIT 1');
	//выполняем запрос, передав в него МАССИВ с параметрами которые мы определили ранее (Параметры передаем в том порядке в котором мы их описывали)
	  $stmt->execute([$DATA['surv_id']]);
	// вытаскиваем данные из полученного ответа из БД
	  while ($row = $stmt->fetch())// выбираем данные из ответа, построчно (по рядам полученой в ответе таблицы)
		  $mass[] = $row[<имя столбца>];
	
	/*------------------------------------------Вставка набора элементов----------------------------------------------*/
	try
	{
		$pdo->beginTransaction();// начинаем транзакцию
		foreach($evaluation_params as $key => $param)
		{
			$sql = 'INSERT INTO `evaluations`(`id_teacher`, `id_question`,`id_group`, `evaluation` ) VALUES (?,?,?,?)';
			$stm = $pdo->prepare($sql);
			$stm->execute(array($param['id_teacher'], $param['id_quest'], $groupID, $param['evaluation']));
		}
		$pdo->commit(); // завершаем транзакцию если все вставки прошли успешно
	} catch (PDOException $e) {
		$pdo->rollBack(); //если поймали исключение, отменяем текущую транзакцию
	}
	
		/*----------------------------------------Удаление элемента из таблицы--------------------------------------------*/
	
	try
	{
		$pdo->beginTransaction();// начинаем транзакцию
		foreach($evaluation_params as $key => $param)
		{
			$sql = 'DELETE FROM `access_keys` WHERE hash=? LIMIT 1';
			$stm = $pdo->prepare($sql);
			$stm->execute(array($DATA['surv_id']));
		}
		$pdo->commit();// завершаем транзакцию если все вставки прошли успешно
	} catch (PDOException $e) {
		$pdo->rollBack();//если поймали исключение, отменяем текущую транзакцию
	}