English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Транзакция (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 (во время отправки письма замените # на @) для сообщения о нарушении авторских прав,并提供 соответствующие доказательства. При обнаружении факта нарушения авторских прав сайт немедленно удаляет подозрительное содержимое.