Maison >développement back-end >tutoriel php >Un cas d'opération de requête PDO utilisant PDO pour se connecter à MySQL

Un cas d'opération de requête PDO utilisant PDO pour se connecter à MySQL

黄舟
黄舟original
2017-09-23 09:35:591747parcourir

Cet article présente principalement des informations pertinentes avec des exemples détaillés d'opérations de requête php mysql PDO.


1 Établir la connexion
<?php 
$dbh = new PDO(&#39;mysql:host=localhost;dbname=access_control&#39;, &#39;root&#39;, &#39;&#39;);  
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
$dbh->exec(&#39;set names utf8&#39;);  
/*添加*/ 
//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";  
$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(&#39;:login&#39;=>&#39;kevin2&#39;,&#39;:password&#39;=>&#39;&#39;));  
echo $dbh->lastinsertid();  
/*修改*/ 
$sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";  
$stmt = $dbh->prepare($sql);  
$stmt->execute(array(&#39;:userId&#39;=>&#39;7&#39;, &#39;:password&#39;=>&#39;4607e782c4d86fd5364d7e4508bb10d9&#39;));  
echo $stmt->rowCount();  
/*删除*/ 
$sql = "DELETE FROM `user` WHERE `login` LIKE &#39;kevin_&#39;"; //kevin%  
$stmt = $dbh->prepare($sql);  
$stmt->execute();  
echo $stmt->rowCount();  
/*查询*/ 
$login = &#39;kevin%&#39;;  
$sql = "SELECT * FROM `user` WHERE `login` LIKE :login";  
$stmt = $dbh->prepare($sql);  
$stmt->execute(array(&#39;:login&#39;=>$login));  
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){    
 print_r($row);  
}  
print_r( $stmt->fetchAll(PDO::FETCH_ASSOC));  
?>



Lien de persistance PDO::ATTR_PERSISTENT=>true

<?php 
$dbh=newPDO(&#39;mysql:host=localhost;port=3306; dbname=test&#39;,$user,$pass,array( 
PDO::ATTR_PERSISTENT=>true 
)); 
?>


2. Capturer les erreurs



3. Transaction
<?php 
try{ 
$dbh=newPDO(&#39;mysql:host=localhost;dbname=test&#39;,$user,$pass); 
 
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
 
$dbh->exec("SET CHARACTER SET utf8"); 
$dbh=null; //断开连接 
}catch(PDOException$e){ 
print"Error!:".$e->getMessage()."<br/>"; 
die(); 
} 
?>



4. Gestion des erreurs
<?php 
try{ 
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
 
$dbh->beginTransaction();//开启事务 
$dbh->exec("insertintostaff(id,first,last)values(23,&#39;Joe&#39;,&#39;Bloggs&#39;)"); 
$dbh->exec("insertintosalarychange(id,amount,changedate) 
values(23,50000,NOW())"); 
$dbh->commit();//提交事务 
 
}catch(Exception$e){ 
$dbh->rollBack();//错误回滚 
echo"Failed:".$e->getMessage(); 
} 
?>


a. Mode silencieux (mode par défaut)



$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT); //不显示错误
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//显示警告错误,并继续执行
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//产生致命错误,PDOException


1.
<?php 
try{   
 $dbh = new PDO($dsn, $user, $password);   
 $sql = &#39;Select * from city where CountryCode =:country&#39;;   
 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);   
 $stmt = $dbh->prepare($sql);   
 $stmt->bindParam(&#39;:country&#39;, $country, PDO::PARAM_STR);   
 $stmt->execute();   
 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {    
 print $row[&#39;Name&#39;] . "/t";   
 }  
}  // if there is a problem we can handle it here  
catch (PDOException $e) {   
 echo &#39;PDO Exception Caught. &#39;;   
 echo &#39;Error with the database: <br />&#39;;   
 echo &#39;SQL Query: &#39;, $sql;   
 echo &#39;Error: &#39; . $e->getMessage();  
}  
?>


2. Utilisez préparer, bindParam et exécuter [recommandé, vous pouvez également utiliser ajouter, modifier, supprimer]
<?php 
$dbh->query($sql); 当$sql 中变量可以用$dbh->quote($params); //转义字符串的数据 
 
$sql = &#39;Select * from city where CountryCode =&#39;.$dbh->quote($country);  
foreach ($dbh->query($sql) as $row)  {   
 print $row[&#39;Name&#39;] . "/t";   
 print $row[&#39;CountryCode&#39;] . "/t";   
 print $row[&#39;Population&#39;] . "/n";  
}  
?>



3. Choses
<?php 
$dbh->prepare($sql); 产生了个PDOStatement对象 
 
PDOStatement->bindParam() 
 
PDOStatement->execute();//可以在这里放绑定的相应变量 
?>



Méthodes PDO couramment utilisées :
<?php  
 try {  
 $dbh = new PDO(&#39;mysql:host=localhost;dbname=test&#39;, &#39;root&#39;, &#39;&#39;);  
 $dbh->query(&#39;set names utf8;&#39;);  
 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
 $dbh->beginTransaction();  
 $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES (&#39;mick&#39;, 22);");  
 $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES (&#39;lily&#39;, 29);");  
 $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES (&#39;susan&#39;, 21);");  
 $dbh->commit();  
 } catch (Exception $e) {  
 $dbh->rollBack();  
 echo "Failed: " . $e->getMessage();  
 }  
?>

PDO::query() est principalement utilisé pour les opérations (PDOStatement) avec des résultats enregistrés renvoyés, en particulier certaines opérations.
PDO::exec() est principalement destiné aux opérations qui ne renvoient pas de jeu de résultats. Tels que l'insertion, la mise à jour et d'autres opérations. Renvoie le nombre de lignes affectées.

PDO::lastInsertId() renvoie le dernier ID de la dernière opération d'insertion, mais veuillez noter : si vous insérez dans tb(col1,col2) des valeurs (v1,v2),(v11,v22).. Pour plusieurs enregistrements , lastinsertid() renvoie uniquement l'ID de la première insertion (v1, v2), pas l'ID du dernier enregistrement inséré.

PDOStatement::fetch() est utilisé pour obtenir un enregistrement. Utilisez while pour parcourir.
PDOStatement::fetchAll() récupère tous les enregistrements en un seul.
PDOStatement::fetchcolumn([int column_indexnum]) est utilisé pour accéder directement à la colonne. Le paramètre column_indexnum est la valeur d'index de la colonne dans la ligne à partir de 0. Cependant, cette méthode ne peut obtenir qu'une seule colonne de la même colonne. ligne à la fois et ne doit être exécuté qu’une seule fois, passez à la ligne suivante. Par conséquent, il est plus facile à utiliser lors de l’accès direct à une certaine colonne, mais il n’est pas utile lors du parcours de plusieurs colonnes.
PDOStatement::rowcount() convient pour obtenir le nombre d'enregistrements lors de l'utilisation de la méthode query("select..."). Il peut également être utilisé en prétraitement. $stmt->rowcount();
PDOStatement::columncount() convient pour obtenir le nombre de colonnes dans un enregistrement lors de l'utilisation de la méthode query("select...").



Remarque :

1. Choisissez récupérer ou récupérer ?

Pour les petits ensembles d'enregistrements, l'utilisation de fetchall est plus efficace et réduit le nombre de fois de récupération de la base de données. Cependant, pour les grands ensembles de résultats, l'utilisation de fetchall apporte beaucoup de charge au système. La quantité de données que la base de données doit transmettre au front-end WEB est trop importante et inefficace.

2. fetch() ou fetchall() a plusieurs paramètres :



paramètre fetch_style :

mixed pdostatement::fetch([int fetch_style [,int cursor_orientation [,int cursor_offset]]])
array pdostatement::fetchAll(int fetch_style)

■$row=$rs->fetchAll(PDO::FETCH_BOTH); est la valeur par défaut, peut être omis et renvoie l'association et l'index.
■$row=$rs->fetchAll(PDO::FETCH_ASSOC); Le paramètre FETCH_ASSOC détermine que seuls les tableaux associatifs sont renvoyés.

■$row=$rs->fetchAll(PDO::FETCH_NUM); Renvoie le tableau d'index

■$row=$rs->fetchAll(PDO::FETCH_OBJ); object , s'il s'agit de fetchall(), renvoie un tableau bidimensionnel composé d'objets

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn