Подсказки на компьютерную тематику

Можно подсмотреть, если забыли…

Как в одной транзакции выполнить несколько запросов к БД MySQL через PDO на PHP

Немного о транзакциях в базах данных MySQL

    Транзакции-

  • необходимы для внесения одного или нескольких SQL-запросов, каждый из которых, в перспективе, может использовать данные другого запроса
  • содержат в себе запросы на SQL к базам данных
  • могут состоять из одного или нескольких запросов к БД на языке SQL
  • выполняются только в полном объеме
  • отменяются полностью, если не выполнен хотя бы один из ее запросов
  • поддерживаются только в таблицах типа InnoDB
  • не имеют ограничения количества запросов
  • до завершения не выдают в общий доступ данные
  • необходимо использовать, только если есть уверенность их корректной работы с используемым типом БД или типом таблиц!

Работающий пример транзакции SQL на PHP с использованием PDO


//начало транзакции из нескольких запросов
try{
//явное создание транзакции
$pdo->beginTransaction();

//ввод нового логина сразу в несколько основных таблиц в БД
$query=$pdo->prepare("INSERT INTO admin (loginp,parp,vrepar,timeregistr,proveren) VALUES (?,'не задано',?,NOW(),?)");
$query->execute(array($login,$vremen,$email));

$query=$pdo->prepare("INSERT INTO email (loginp) VALUES (?)");
$query->execute(array($login));

$query=$pdo->prepare("INSERT INTO primer (loginp,datarozd,ipp) VALUES (?,CURRENT_DATE(),?)");
$query->execute(array($login,$ip));
} catch (PDOException $e) { //если не сработает один из запросов, то все запросы этой транзакции отменяются
$pdo->rollBack();
//echo "PDOException:".$e->getCode()."|".$e->getMessage();
//покажет код исключения и что именно не так в коде

echo "Что-то пошло не так! <a href='/index.php'>Попробуйте еще раз!</a>";
exit();
}

//запуск кода транзакции
$pdo->commit();

    Обозначения в коде

  • $pdo – объект,создаваемый при подключении к БД
  • beginTransaction() – начало транзакции
  • commit() – запуск выполнения транзакции

Как в одной транзакции выполнить несколько запросов к БД MySQL через PDO на PHP

Немного о транзакциях в базах данных MySQL

    Транзакции-

  • необходимы для внесения одного или нескольких SQL-запросов, каждый из которых, в перспективе, может использовать данные другого запроса
  • содержат в себе запросы на SQL к базам данных
  • могут состоять из одного или нескольких запросов к БД на языке SQL
  • выполняются только в полном объеме
  • отменяются полностью, если не выполнен хотя бы один из ее запросов
  • поддерживаются только в таблицах типа InnoDB
  • не имеют ограничения количества запросов
  • до завершения не выдают в общий доступ данные
  • необходимо использовать, только если есть уверенность их корректной работы с используемым типом БД или типом таблиц!

Работающий пример транзакции SQL на PHP с использованием PDO


//начало транзакции из нескольких запросов
try{
//явное создание транзакции
$pdo->beginTransaction();

//ввод нового логина сразу в несколько основных таблиц в БД
$query=$pdo->prepare("INSERT INTO admin (loginp,parp,vrepar,timeregistr,proveren) VALUES (?,'не задано',?,NOW(),?)");
$query->execute(array($login,$vremen,$email));

$query=$pdo->prepare("INSERT INTO email (loginp) VALUES (?)");
$query->execute(array($login));

$query=$pdo->prepare("INSERT INTO primer (loginp,datarozd,ipp) VALUES (?,CURRENT_DATE(),?)");
$query->execute(array($login,$ip));
} catch (PDOException $e) { //если не сработает один из запросов, то все запросы этой транзакции отменяются
$pdo->rollBack();
//echo "PDOException:".$e->getCode()."|".$e->getMessage();
//покажет код исключения и что именно не так в коде

echo "Что-то пошло не так! <a href='/index.php'>Попробуйте еще раз!</a>";
exit();
}

//запуск кода транзакции
$pdo->commit();

    Обозначения в коде

  • $pdo – объект,создаваемый при подключении к БД
  • beginTransaction() – начало транзакции
  • commit() – запуск выполнения транзакции