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

黄舟
Libérer: 2023-03-16 11:06:02
original
1733 Les gens l'ont consulté

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));  
?>
Copier après la connexion



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 
)); 
?>
Copier après la connexion


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(); 
} 
?>
Copier après la connexion



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(); 
} 
?>
Copier après la connexion


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
Copier après la connexion


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();  
}  
?>
Copier après la connexion


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";  
}  
?>
Copier après la connexion



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



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();  
 }  
?>
Copier après la connexion

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)
Copier après la connexion

■$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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal