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

Gestione della sicurezza e delle transazioni di PDO

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.

Ti potrebbe interessare