이 기사의 예에서는 PHP 데이터 객체 PDO 작업 기술을 설명합니다. 다음과 같이 참조할 수 있도록 모든 사람과 공유하세요.
PHP 데이터 개체(PDO) 확장은 PHP가 데이터베이스에 액세스하기 위한 가볍고 일관된 인터페이스를 정의합니다.
<?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(); } ?>
PDO 연산 트랜잭션
//开启事务 beginTransacition() //回滚 rollback() //提交 commit() //判断是否处于事务之中 inTransaction()
마지막으로 삽입된 행의 ID를 반환
PDO::lastInsertID()
exec() 실행
쿼리로 반환 () 이에 비해 exec()는 영향을 받은 행 수를 반환합니다
$sql = "insert into table values('$val')"; if(false===$pdo->exec($sql)){ echo '执行失败'; }
PDO는 사전 컴파일을 구현합니다
는 sql의 구조를 사전 컴파일하는 sql 실행 구문을 말합니다
동일한 구조의 여러 SQL을 실행하는 경우 컴파일의 중간 결과(구문 트리)도 일관성이 있어야 합니다. 따라서 동일한 구조를 균일하게 컴파일하고 매번 다른 데이터로 실행할 수 있습니다.
통합 구조 컴파일
$pdoStatement = $pdo->prepare(sql结构)
데이터를 중간 컴파일 결과에 바인딩
$pdoStatement ->bindValue()
실행
$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);
사전 컴파일이 더 좋습니다. 사용자의 데이터가 사전 컴파일에 참여할 필요가 없으므로 SQL 주입을 방지하므로 컴파일 중에 구조가 고정되므로 데이터가 SQL 구조에 영향을 미치지 않습니다.
$pdo->query() 및 $pdo->execute() SQL 주입을 방지해야 하는 경우 $pdo->quote()를 사용할 수 있습니다(해당 기능은 먼저 이스케이프하고 그런 다음 따옴표를 추가하세요)
PDOstatement의 일반적인 방법:
errorInfo()
errorCode()
fetchColumn()
fetch()
fetchAll()
rowCount()
closeCursor()
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)); ?>
실행 효과 다이어그램은 다음과 같습니다.
이 기사가 PHP 프로그램 디자인에 도움이 되는 모든 사람에게 도움이 되기를 바랍니다.
PHP 데이터 객체 PDO 연산 스킬 요약과 관련된 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!