Les exemples de cet article décrivent les techniques de fonctionnement des objets de données PHP PDO. Partagez-le avec tout le monde pour votre référence, comme suit :
L'extension PHP Data Object (PDO) définit une interface légère et cohérente permettant à PHP d'accéder à la base de données.
<?php try { $dsn = "mysql:host=localhost; port=3306; dbname=wsq_hotel; charset=utf-8"; $user = 'root'; $psw ='root'; $pdo = new PDO($dsn,$user,$psw); $sql = 'select goods_prices from wsq_goods_info where goods_id=2'; // $sql = "show database"; $res = $pdo->query($sql) or var_dump($pdo->errorInfo()); // var_dump($res); $mon = $res->fetch(PDO::FETCH_ASSOC); echo $mon['goods_price']; } catch (PDOException $e) { echo $e->getMessage(); } ?>
Transaction d'opération PDO
//开启事务 beginTransacition() //回滚 rollback() //提交 commit() //判断是否处于事务之中 inTransaction()
Renvoyer l'ID de la dernière ligne insérée
PDO::lastInsertID()
exécution exec()
avec requête () En comparaison, exec() renvoie le nombre de lignes affectées
$sql = "insert into table values('$val')"; if(false===$pdo->exec($sql)){ echo '执行失败'; }
PDO implémente la pré-compilation
fait référence à une syntaxe d'exécution de SQL qui précompile la structure de sql
Si plusieurs SQL avec la même structure sont exécutés, les résultats intermédiaires de la compilation (arbre de syntaxe) doivent également être cohérents. Par conséquent, la même structure peut être compilée uniformément et exécutée avec des données différentes à chaque fois.
Compiler une structure unifiée
$pdoStatement = $pdo->prepare(sql结构)
Lier les données aux résultats de compilation intermédiaires
$pdoStatement ->bindValue()
Exécution
$pdoStatement ->execute() //$sql = "insert into table values(null,?)"; $sql = "insert into table values(null,:name)"; $stmt = $pdo->prepare($sql); //多组数据也是一编译一执行 //$stmt->bindValue(1,'bee'); $stmt->bindValue(':name','bee'); $res = $stmt->execute(); var_dump($res);
La pré-compilation est meilleure Ceci efficacement empêche l'injection SQL car les données de l'utilisateur ne sont pas nécessaires pour participer à la pré-compilation, donc la structure est corrigée lors de la compilation, donc les données n'affectent pas la structure SQL.
$pdo->query() et $pdo->execute() Si vous devez empêcher l'injection SQL, vous pouvez utiliser $pdo->quote() (sa fonction est d'abord d'échapper et puis ajoutez des guillemets)
Méthodes courantes de PDOstatement :
errorInfo()
errorCode()
fetchColumn()
fetch()
fetchAll()
rowCount()
closeCursor()
application pdo
<?php header('content-type:text/html;charset=utf-8'); class PDODB{ static private $_init; private $_host; private $_port; private $_dbname; private $_username; private $_password; private $_charset; private $_dns; private $_pdo; private function __construct($config){ $this->_initParamas($config); $this->_initDNS(); $this->_initDriverOptions(); $this->_initPDO(); } private function __clone(){} static public function getInstance($config){ if(!static::$_init instanceof static){ static::$_init = new static($config); } return static::$_init; } private function _initParamas($config){ $this->_host = isset($config['host'])?$config['host']:'localhost'; $this->_port = isset($config['port'])?$config['port']:'3306'; $this->_dbname = isset($config['dbname'])?$config['dbname']:''; $this->_username = isset($config['username'])?$config['username']:'root'; $this->_passward = isset($config['passward'])?$config['passward']:''; $this->_charset = isset($config['charset'])?$config['charset']:'utf8'; } private function _initDNS(){ $this->_dns = "mysql:host=$this->_host;port=$this->_port;dbname=$this->_dbname"; } private function _initDriverOptions(){ $this->_driverOptions = array( PDO::MYSQL_ATTR_INIT_COMMAND => "set names $this->_charset" ); } private function _initPDO(){ $this->_pdo = new PDO($this->_dns,$this->_username,$this->_passward,$this->_driverOptions) or die("fail"); } public function query($sql){ if(!$result = $this->_pdo->query($sql)){ $erro = $this->_pdo->errorInfo(); echo '失败的语句'.$sql.'<br>'; echo '错误代码'.$erro[1].'<br>'; echo '错误信息'.$erro[2].'<br>'; die; } return $result; } public function fetchAll($sql){ $res = $this->query($sql); $list = $res->fetchAll(PDO::FETCH_ASSOC); $res->closeCursor(); return $list; } public function fetchRow($sql){ $res = $this->query($sql); $row = $res->fetch(PDO::FETCH_ASSOC); $res->closeCursor(); return $row; } public function fetchOne($sql){ $res = $this->query($sql); $one = $res->fetchColumn(); $res->closeCursor(); return $one; } public function escape_string($data){ return $this->_pdo->quote($data); } } $config = array( "host"=>"localhost", "username"=>"root", "passward"=>"root", "dbname"=>"students" ); $pdo = PDODB::getInstance($config); $sql = "select sdept from student where sage=21"; var_dump($pdo->fetchRow($sql)); ?>
Le diagramme des effets d'exécution est le suivant :
J'espère que cet article aidera tout le monde avec ses programmes PHP. La conception aide.
Pour plus d'articles liés au résumé des compétences opérationnelles des objets de données PHP PDO, veuillez faire attention au site Web PHP chinois !