English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La transazione (Transaction) è una funzione molto importante per l'operazione del database, ti permette di prenotare una o una serie di istruzioni SQL, e di eseguirle tutte insieme. Durante l'esecuzione, se una delle istruzioni fallisce, tutte le operazioni modificate possono essere annullate. Se l'esecuzione è un successo, l'intera serie di operazioni sarà permanente. La transazione risolve bene i problemi di asincronia durante l'operazione del database. Allo stesso tempo, eseguire grandi quantità di dati attraverso la transazione può migliorare molto l'efficienza dell'esecuzione.
La gestione delle transazioni ha quattro caratteristiche: atomicità, coerenza, isolamento, persistenza. Non tutte le banche dati supportano la gestione delle transazioni, PDO fornisce supporto per le banche dati che possono eseguire le transazioni.
1. Gestione delle eccezioni PDO
PDO::ATTR_ERRMODE
1) PDO::ATTR_ERRMODE // Non segnalare errori (ignorare) (0)
2) PDO::ERRMODE_WARNING
// In forma di avviso (1)
3) PDO::ERRMODE_EXCEPTION // In forma di eccezione (2)
<?php //Per default è PDO::ATTR_ERRMODE non segnala errori (ignora) (0), è necessario utilizzare errorCode() e 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); }catch (PDOException $e){ die("fail to connect db".$e->getMessage()); } $sql="INSERT INTO user VALUES(null,'dabao','26')"; try{ $res=$pdo->exec($sql); }catch (PDOException $e){ echo $e->getMessage(); } // $res=$pdo->exec($sql); //if($res){ // echo 'OK'; //}else{ // echo $pdo->errorCode(); // echo '<br/>'; // print_r($pdo->errorInfo()); //}
II. Metodi di pre-elaborazione PDO
1) prepare() // Utilizzato per eseguire una statement SQL di ricerca, restituisce un oggetto PDOStatement
2) bindValue() // Vincola i valori ai parametri corrispondenti, restituisce un valore booleano
3) bindParam() // Vincola i parametri ai segnaposto di query corrispondenti, restituisce un valore booleano
4) bindColumn() // Utilizzato per abbinare un nome di colonna e un nome di variabile specificato
5) execute() // Esegue una statement pre-elaborata pronta, restituisce un valore booleano
6) rowCount() // Restituisce il numero totale di righe influenzate dalle operazioni di aggiunta, rimozione, modifica e ricerca
<?php /** * Le espressioni pre-elaborate con segni di domanda, ci sono tre modi di vincolamento */ //1. Connettiti al database try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){ die("fail to connect db".$e->getMessage()); } //2. Query SQL preparata $sql="INSERT INTO users(id,name,age) VALUES(?,?,?)"; $stmt=$pdo->prepare($sql); //3. Vincolamento dei parametri di ? $id=null; $name="test103"; $age=103; // Prima modalità di binding //$stmt->bindValue(1,$id); //$stmt->bindValue(2,$name); //$stmt->bindValue(3,$age); // Seconda modalità di binding //$stmt->bindParam(1,$id); //$stmt->bindParam(2,$name); //$stmt->bindParam(3,$age); //4. Esegui // $stmt->execute(); // Terza modalità di binding: esegui direttamente un array $stmt->execute(array($id,$name,$age)); echo $stmt->rowCount();
<?php /** * La pre-elaborazione delle espressioni alias, ci sono tre modi di vincolamento */ //1. Connettiti al database try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){ die("fail to connect db".$e->getMessage()); } //2. Query SQL preparata $sql="INSERT INTO users(id,name,age) VALUES(:id,:name,:age)"; $stmt=$pdo->prepare($sql); //3. Binding dei parametri $id=null; $name="test203"; $age=23; // Prima modalità di binding // $stmt->bindValue("id",$id); // $stmt->bindValue("name",$name); // $stmt->bindValue("age",$age); // Seconda modalità di binding // $stmt->bindParam("id",$id); // $stmt->bindParam("name",$name); // $stmt->bindParam("age",$age); //4. Esegui // $stmt->execute(); // Terza modalità di binding: esegui direttamente un array $stmt->execute(array("id"=>$id,"name"=>$name,"age"=>$age)); echo $stmt->rowCount();
<?php /** * Ricerca dei dati con metodo preparato */ //1. Connettiti al database try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); }catch (PDOException $e){ die("Impossibile connettersi a mysql".$e->getMessage()); } //2. Prepara la query $sql="SELECT id,name,age FROM users"; $stmt=$pdo->prepare($sql); //3. Esegui $stmt->execute(); foreach($stmt as $val){ echo $val['id']."------".$val['name']."------".$val['age']."<br/>"; }
3. Introduzione ai metodi di gestione delle transazioni
1) beginTransaction() // Apri una transazione (crea un punto di rollback)
2) commit();
// Submit la transazione
3) rollBack() // Operazione di rollback della transazione
<?php //1. Connettiti al database try{ $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch (PDOException $e){ die("fail to connect db".$e->getMessage()); } //2. Esecuzione delle operazioni di dati try{ //Apertura della transazione $pdo->beginTransaction(); $sql="insert into users(id,name,age) VALUES(?,?,?)"; $stmt=$pdo->prepare($sql); //Inserimento dei parametri $stmt->execute(array(null,"test1","21")); $stmt->execute(array(null,"test2","22")); $stmt->execute(array(null,"test3","23")); //Commit della transazione $pdo->commit(); }catch (PDOException $e){ die("fail to execute".$e->getMessage()); //Rirollback della transazione $pdo->roolback(); }
Questo è tutto il contenuto dell'articolo, spero che sia utile per la tua apprendimento, e ti prego di supportare e urlare i tutorial.
Dichiarazione: il contenuto di questo articolo è stato prelevato dalla rete, i diritti d'autore appartengono ai rispettivi proprietari, il contenuto è stato contribuito autonomamente dagli utenti di Internet e caricato autonomamente, il sito web non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, invia un'e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, il sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.