Maison >développement back-end >tutoriel php >Un cas d'opération de requête PDO utilisant PDO pour se connecter à MySQL
Cet article présente principalement des informations pertinentes avec des exemples détaillés d'opérations de requête php mysql PDO.
<?php $dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', ''); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->exec('set names utf8'); /*添加*/ //$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(':login'=>'kevin2',':password'=>'')); echo $dbh->lastinsertid(); /*修改*/ $sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':userId'=>'7', ':password'=>'4607e782c4d86fd5364d7e4508bb10d9')); echo $stmt->rowCount(); /*删除*/ $sql = "DELETE FROM `user` WHERE `login` LIKE 'kevin_'"; //kevin% $stmt = $dbh->prepare($sql); $stmt->execute(); echo $stmt->rowCount(); /*查询*/ $login = 'kevin%'; $sql = "SELECT * FROM `user` WHERE `login` LIKE :login"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$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('mysql:host=localhost;port=3306; dbname=test',$user,$pass,array( PDO::ATTR_PERSISTENT=>true )); ?>
2. Capturer les erreurs
<?php try{ $dbh=newPDO('mysql:host=localhost;dbname=test',$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(); } ?>
<?php try{ $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction();//开启事务 $dbh->exec("insertintostaff(id,first,last)values(23,'Joe','Bloggs')"); $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
<?php try{ $dbh = new PDO($dsn, $user, $password); $sql = 'Select * from city where CountryCode =:country'; $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $stmt = $dbh->prepare($sql); $stmt->bindParam(':country', $country, PDO::PARAM_STR); $stmt->execute(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { print $row['Name'] . "/t"; } } // if there is a problem we can handle it here catch (PDOException $e) { echo 'PDO Exception Caught. '; echo 'Error with the database: <br />'; echo 'SQL Query: ', $sql; echo 'Error: ' . $e->getMessage(); } ?>
<?php $dbh->query($sql); 当$sql 中变量可以用$dbh->quote($params); //转义字符串的数据 $sql = 'Select * from city where CountryCode ='.$dbh->quote($country); foreach ($dbh->query($sql) as $row) { print $row['Name'] . "/t"; print $row['CountryCode'] . "/t"; print $row['Population'] . "/n"; } ?>
<?php $dbh->prepare($sql); 产生了个PDOStatement对象 PDOStatement->bindParam() PDOStatement->execute();//可以在这里放绑定的相应变量 ?>
<?php try { $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', ''); $dbh->query('set names utf8;'); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);"); $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('lily', 29);"); $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 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.
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_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!