English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Безопасная обработка и управление транзакциями PDO

Транзакция (Transaction) — это очень важная функция для работы с базами данных, которая позволяет забронировать одну или несколько SQL-запросов и выполнить их вместе, и если одно из них выполнится с ошибкой, можно откатить все измененные операции. Если выполнение успешное, то вся серия операций будет永远 действительна. Транзакции хорошо решают проблему асинхронности при работе с базами данных. Кроме того, при выполнении больших объемов данных через транзакции, эффективность выполнения может значительно увеличиться.

Обработка транзакций имеет четыре характеристики: атомарность,一致性, независимость, устойчивость. Не все базы данных поддерживают обработку транзакций, PDO предоставляет поддержку транзакций для баз данных, которые могут их выполнять.

I. Обработка исключений PDO
PDO::ATTR_ERRMODE

1) PDO::ATTR_ERRMODE // не сообщать об ошибках (пропуск) (0)

2) PDO::ERRMODE_WARNING
// с помощью предупреждений сообщать об ошибках (1)

3) PDO::ERRMODE_EXCEPTION // с помощью исключений сообщать об ошибках (2)

<?php 
//По умолчанию PDO::ATTR_ERRMODE не показывает ошибки (пропускает) (0), нужно использовать errorCode() и errorInfo() 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
//  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); 
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
  die("не удалось подключиться к базе данных".$e->getMessage()); 
} 
$sql="INSERT INTO user VALUES(null,'dabao','26')"; 
try{ 
  $res=$pdo->exec($sql); 
} 
  echo $e->getMessage(); 
} 
//$res=$pdo->exec($sql); 
//if($res){ 
//  echo 'OK'; 
//}else{ 
//  echo $pdo->errorCode(); 
//  echo '<br/>'; 
//  print_r($pdo->errorInfo()); 
//} 

II. Методы предварительной обработки PDO

1) prepare() // Используется для выполнения запроса SQL, возвращает объект PDOStatement

2) bindValue() // Привязывает значение к соответствующему параметру, возвращает логическое значение

3) bindParam() // Привязывает параметр к соответствующему маркеру запроса, возвращает логическое значение

4) bindColumn() // Используется для соответствия имени столбца и переменной

5) execute() // Выполняет готовую предварительную обработку, возвращает логическое значение

6) rowCount() // Возвращает общее количество строк,affected после выполнения операций insert, delete, update, select

<?php 
/** 
 * Предварительная обработка с символами ?, существует три способа привязки 
 */ 
//1. Подключение к базе данных 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
} 
  die("не удалось подключиться к базе данных".$e->getMessage()); 
} 
//2. Подготовленный SQL запрос 
$sql="INSERT INTO users(id,name,age) VALUES(?,?,?)"; 
$stmt=$pdo->prepare($sql); 
//3. Привязка параметров ? 
$id=null; 
$name="test103"; 
$age=103; 
//Первый способ привязки 
//$stmt->bindValue(1,$id); 
//$stmt->bindValue(2,$name); 
//$stmt->bindValue(3,$age); 
//Второй способ привязки 
//$stmt->bindParam(1,$id); 
//$stmt->bindParam(2,$name); 
//$stmt->bindParam(3,$age); 
//4. Выполнение 
//$stmt->execute(); 
//Третий способ привязки:直接执行 массив 
$stmt->execute(array($id,$name,$age)); 
echo $stmt->rowCount(); 
<?php 
/** 
 * Предварительная обработка алиасов, существует три способа привязки 
 */ 
//1. Подключение к базе данных 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
} 
  die("не удалось подключиться к базе данных".$e->getMessage()); 
} 
//2. Подготовленный SQL запрос 
$sql="INSERT INTO users(id,name,age) VALUES(:id,:name,:age)"; 
$stmt=$pdo->prepare($sql); 
//3. Привязка параметров 
$id=null; 
$name="test203"; 
$age=23; 
//Первый способ привязки 
//$stmt->bindValue("id",$id); 
//$stmt->bindValue("name",$name); 
//$stmt->bindValue("age",$age); 
//Второй способ привязки 
//$stmt->bindParam("id",$id); 
//$stmt->bindParam("name",$name); 
//$stmt->bindParam("age",$age); 
//4. Выполнение 
//$stmt->execute(); 
//Третий способ привязки:直接执行 массив 
$stmt->execute(array("id"=>$id,"name"=>$name,"age"=>$age)); 
echo $stmt->rowCount(); 
<?php 
/** 
 * Поиск данных с использованием подготовленного запроса 
 */ 
//1. Подключение к базе данных 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
} 
  die("fail to connect mysql".$e->getMessage()); 
} 
//2. Подготовка запроса 
$sql="SELECT id,name,age FROM users"; 
$stmt=$pdo->prepare($sql); 
//3. Выполнение 
$stmt->execute(); 
foreach($stmt as $val){ 
  echo $val['id']."------".$val['name']."------".$val['age']."<br/>"; 
} 

Третий раздел. Объяснение методов обработки транзакций
1) beginTransaction()     //Запуск транзакции (создание точки откат)

2) commit() 
   //Подтверждение транзакции

3) rollBack()            //Операция откат транзакции

<?php 
//1. Подключение к базе данных 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
  die("не удалось подключиться к базе данных".$e->getMessage()); 
} 
//2. Выполнение данных операций 
try{ 
  //Запуск транзакции 
  $pdo->beginTransaction(); 
  $sql="insert into users(id,name,age) VALUES(?,?,?)"; 
  $stmt=$pdo->prepare($sql); 
  //Передача параметров 
  $stmt->execute(array(null,"test1","21")); 
  $stmt->execute(array(null,"test2","22")); 
  $stmt->execute(array(null,"test3","23")); 
  //Подтверждение транзакции 
  $pdo->commit(); 
} 
  die("не удалось выполнить".$e->getMessage()); 
  //Возврат транзакции 
  $pdo->roolback(); 
} 

Вот весь контент статьи, надеюсь, он поможет вам в изучении, и希望大家多多支持呐喊教程。

Заявление: содержание этой статьи взято из Интернета, авторские права принадлежат соответствующему автору, контент предоставлен пользователями Интернета в добровольном порядке, сайт не имеет права собственности, не был обработан вручную и не несет ответственности за соответствующие юридические последствия. Если вы обнаружите подозрительное содержимое, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для сообщения о нарушении авторских прав,并提供 соответствующие доказательства. При обнаружении факта нарушения авторских прав сайт немедленно удаляет подозрительное содержимое.

Вам может понравиться