PHP数据库抽象层--PDO(PHP Data Object) [一]
1、简介:(PDO数据库访问抽象层,统一各种 数据库的访问接口 )
- PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。 注意利用 PDO 扩展自身并不能实现任何数据库功能;必须使用一个 具体数据库的 PDO 驱动 来访问数据库服务。
- PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不不提供 数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。
- (http://php.net/manual/zh/intro.pdo.php)
extension=php_pdo_mysql.dllextension=php_pdo_pgsql.dll


1<?php2// 通过参数形式连接数据库3try{4 $dsn ='mysql:host=localhost;dbname=pdotest';5 $name ='root';6 $passwd ='root';7 $pdo =new PDO($dsn, $name, $passwd);8 var_dump($pdo);9}catch(PDOException $e){10 echo $e->getMessage();11}12
mysql:dbname=pdotest;host=localhost;
<?php// 通过参数形式连接数据库try{$dsn ='uri:/var/www/html/php-code/pdo/pdo_uri_conn.txt';$name ='root';$passwd ='root';$pdo =new PDO($dsn, $name, $passwd);var_dump($pdo);}catch(PDOException $e){echo $e->getMessage();}


<?php......// 现在运行完成,在此关闭连接$dbh =null;

1<?php2// 通过参数形式连接数据库3try{4 $dsn ='mysql:host=localhost;dbname=pdotest';5 $name ='root';6 $passwd ='root';7 $pdo =new PDO($dsn, $name, $passwd);8 $sql =<<<EOF9 CREATE TABLE IF NOT EXISTS user(10 id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,11 name VARCHAR(20) NOT NULL UNIQUE,12 passwd VARCHAR(32) NOT NULL,13 email VARCHAR(30) NOT NULL14);15 EOF;16// exec 对于没有受影响的行数将返回017 $res = $pdo->exec($sql);18 var_dump($res);19// 现在运行完成,在此关闭连接20 $pdo =null;21}catch(PDOException $e){22 echo $e->getMessage();23}2425
1<?php2// 通过参数形式连接数据库3try{4 $dsn ='mysql:host=localhost;dbname=pdotest';5 $name ='root';6 $passwd ='root';7 $pdo =new PDO($dsn, $name, $passwd);8 $sql ="9 INSERT INTO user (name, passwd, email)10 VALUES('wangxb', MD5('123'), 'wangxb@mail.com'),11 ('wangxb1', MD5('123'), 'wangxb@mail.com'),12 ('wangxb2', MD5('123'), 'wangxb@mail.com')13 ";14// exec 对于没有受影响的行数将返回015 $res = $pdo->exec($sql);16 var_dump($res);17// 返回最后插入行的ID或序列值18 echo $pdo->lastInsertId();19// 现在运行完成,在此关闭连接20 $pdo =null;21}catch(PDOException $e){22 echo $e->getMessage();23}24

0: SQLSTATE error code1: specific error code.2: specific error message
1<?php2/*3 * 使用errorCode 和 errorInfo 两个方法显示错误信息1 <?php2 /*3 * 使用errorCode 和 errorInfo 两个方法显示错误信息4 */5try{6 $dsn ='mysql:host=localhost;dbname=pdotest';7 $name ='root';8 $passwd ='root';9 $pdo =new PDO($dsn, $name, $passwd);10// 我们这里插入的一个没有的表 user123 中11 $sql ="12 INSERT INTO user123 (name, passwd, email)13 VALUES('wangxb', MD5('123'), 'wangxb@mail.com')14 ";15//16 $res = $pdo->exec($sql);17if(false=== $res){18// errorCode 获取跟数据库句柄上一次操作相关的 SQLSTATE19 echo $pdo->errorCode();20print"\n";21// errorInfo 返回一个错误信息数据:22// 0: SQLSTATE error code23// 1: specific error code.24// 2: specific error message25 print_r($pdo->errorInfo());26returnfalse;27}28 var_dump($res);29// 返回最后插入行的ID或序列值30 echo "最后一天插入的信息ID:".$pdo->lastInsertId();31// 现在运行完成,在此关闭连接32 $pdo =null;33}catch(PDOException $e){34 echo $e->getMessage();35}36运行:
我们在mysql客户端执行相同语句
可以看到 errorInfo()返回的信息其实是将mysql错误信息以数组的形式返回
1<?php2/*3 * 使用exec方法执行插入语句4 */5// 通过参数形式连接数据库6try{7 $dsn ='mysql:host=localhost;dbname=pdotest';8 $name ='root';9 $passwd ='root';10 $pdo =new PDO($dsn, $name, $passwd);11//$sql = "SELECT * FROM user WHERE id=12";12 $sql ="SELECT * FROM user";13// query 方法执行将返回一个PDOStatment对象14 $stmt = $pdo->query($sql);15if(!$pdo &&!$stmt){16 var_dump($pdo->errorInof());17}18// 对于query返回的PDOStatment对象,我们同样可是使用foreach方法来遍历数据其中的数据19foreach($stmt as $row){20 var_dump($row);21 echo '<hr>';22}2324//25 echo '-------------------<br>';26 var_dump($stmt->fetch());27 echo '-------------------<br>';2829// prepare方法是为execute准备一个statmentObj30 $sth = $pdo -> prepare ("SELECT name, id FROM user");31 $sth -> execute ();32 echo '++++++++++++++++++++++++';33 var_dump($sth->fetch());34 echo '++++++++++++++++++++++++';35 var_dump($stmt);36// 现在运行完成,在此关闭连接37 $pdo =null;38}catch(PDOException $e){39 echo $e->getMessage();40}414243
1<?php2/*3 * 使用exec方法执行插入语句4 */5// 通过参数形式连接数据库6try{7 $dsn ='mysql:host=localhost;dbname=pdotest';8 $name ='root';9 $passwd ='root';10 $pdo =new PDO($dsn, $name, $passwd);1112/*13 * 使用prepare和execute方法形式14 */15 $id1 =12;16 $id2 =13;17// 利用占位符形式18 $sql ="SELECT * FROM user WHERE id=? OR id=?";19 $sth = $pdo -> prepare ($sql);20 $sth -> execute(array($id1, $id2));21 var_dump($sth->fetchAll(PDO::FETCH_ASSOC));2223 echo '<hr>';24// 使用参数形式25 $sql_1 ="SELECT id, name FROM user WHERE id= :id";26 $sth_1 = $pdo -> prepare ($sql_1);27 $sth_1 -> execute(array('id'=>$id1));28 var_dump($sth_1->fetchAll(PDO::FETCH_ASSOC));2930 echo '<hr>';31// 使用bindParam方式32 $sql_2 ="SELECT * FROM user WHERE id=? OR id=?";33 $sth_2 = $pdo -> prepare ($sql_2);34 $sth_2->bindParam(1, $id1, PDO::PARAM_INT);35 $sth_2->bindParam(2, $id2, PDO::PARAM_INT);36 $sth_2 -> execute();37 var_dump($sth_2->fetchAll(PDO::FETCH_ASSOC));3839// 现在运行完成,在此关闭连接40 $pdo =null;41}catch(PDOException $e){42 echo $e->getMessage();43}44

1<?php2/*3 * 使用exec方法执行插入语句4 */5// 通过参数形式连接数据库6try{7 $dsn ='mysql:host=localhost;dbname=pdotest';8 $name ='root';9 $passwd ='root';10 $pdo =new PDO($dsn, $name, $passwd);11 $sql ="SELECT * FROM user";12 echo "自动提交:".$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);13 echo '<br/>';14 echo 'PDO默认的错误处理模式:'.$pdo->getAttribute(PDO::ATTR_ERRMODE);1516 echo '<br/>';17//现在我们重设自动提交18 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);19 echo "重设后的自动提交:".$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);2021// 现在运行完成,在此关闭连接22 $pdo =null;2324// 我们也可以在new一个PDO对象时,利用传递参数中的第四个参数(可省略)来设置我们此次连接数据库时的各项参数25// (我们可以在这里找到所有的设置项:http://php.net/manual/zh/pdo.constants.php)26// 就像下面这样27 $dsn ='mysql:host=localhost;dbname=pdotest';28 $name ='root';29 $passwd ='root';30 $option = array(31 PDO::ATTR_AUTOCOMMIT => O,32 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION33);34 $pdo =new PDO($dsn, $name, $passwd, $option);35 echo '<hr/>';36 echo '使用option设置后';37 echo '<br/>';38 echo "自动提交:".$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);39 echo '<br/>';40 echo 'PDO错误处理模式:'.$pdo->getAttribute(PDO::ATTR_ERRMODE);41}catch(PDOException $e){42 echo $e->getMessage();43}44

PHP数据库抽象层--PDO(PHP Data Object) [一]的更多相关文章
- 数据库抽象层PDO
通过数据库抽象层PDO可以访问多个数据库 //数据库抽象层PDO //造DSN:驱动名:dbname=数据库名:host=服务器地址 $dsn = "mysql:dbname=mydb;ho ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 2
18.2 PDO所支持的数据库 使用PHP可以处理各种数据库系统,包括MySQL.PostgreSQL.Oracle.MsSQL等.但访问不同的数据库系统时,其所使用的PHP扩展函数也是不同的.例如 ...
- PHP 数据库抽象层pdo
PDO是PHP数据对象(PHP Data Object)的缩写. pdo就是一个"数据库访问抽象层",作用是统一各种数据库的访问接口,能够轻松地在不同数据库之间进行切换,使得数据库 ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 1
现在,如果你已经能熟练地使用MySQL客户端软件来操作数据库中的数据,就可以开始学习如何使用PHP来显示和修改数据库中的数据了.PHP提供了标准的函数来操作数据库.在PHP 5以上的版本中可以使用My ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 5
18.5 使用PDO对象 PDO扩展类库为PHP访问数据库定义了一个轻量级.一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据,大大简化了数据 ...
- 【代码总结】数据库抽象层PDO
一.概述 PDO就是一个"数据库访问抽象层",起作用是统一各种数据库的访问接口,能够轻松的在不同数据库之间进行切换. 二.PDO的安装 编辑php.ini文件 添加 extensi ...
- 数据库抽象层 pdo
一 . PDO的连接 $host = "localhost"; $dbname = "hejuntest"; $username = "root&qu ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12
18.9 管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PD ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 9
18.7 PDO的事务处理 事务是确保数据库一致的机制,是一个或一系列的查询,作为一个单元的一组有序的数据库操作.如果组中的所有SQL语句都操作成功,则认为事务成功,那么事务被提交,其修改将作用于所 ...
随机推荐
- Mysql 知识(3)
1.如何登陆mysql数据库 mysql -u username -p 2.如何开启/关闭mysql服务 service mysql start/stop 3.查看mysql的状态 service m ...
- 在JSP中,使用get提交方式出现乱码时,为什么要使用new String(s.getBytes("iso-8859-1"),"utf-8");?
最近在学JSP,在学习处理get方式提交数据出现乱码问题的时候,对其中的一个解决方法new String(s.getBytes("iso-8859-1"),"utf-8& ...
- Java 使用getClass().getResourceAsStream()方法获取资源
之前想获取一个资源文件做一些处理,使用getClass().getResourceAsStream()一直拿不到文件. 具体的用法. 1 InputStream is = this.getClass( ...
- JQUERY框架的优点与面试题
1 你觉得 jquery 有哪些好处?jQuery 是轻量级的 javascript 框架强大的选择器出色的 DOM 操作的封装可靠的事件处理机制完善的 ajax 封装出色的浏览器的兼容性支持链式操作 ...
- Hadoop主要架构
主要架构图 各部分作用 * Core:核心支持,内核代码 * MapReduce:映射数据 * HDFS:文件存储 * ZooKepper:服务器节点和进程通信的协调工具 * Pig:支持用户和Map ...
- Python3 ssl模块不可用的问题
编译安装完Python3之后,使用pip来安装python库,发现了如下报错: $ pip install numpy pip is configured with locations that re ...
- IDEA kotlin 配置
修改 idea 安装目录 bin 目录 下 idea.properties 文件修改idea.max.intellisense.filesize=50000 避免proto 生成的java文件不被 ...
- docker问题
Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work. 解决办法: # vim /usr/lib/sysctl ...
- Linux就业技术指导(一):简历撰写及面试筹备要领
一,开场 二,模型 三,目标选材 3.1 什么是目标选材 简单说就是确定一个候选人是否符合某一个工作岗位要求的整个流程.这是对招聘方的一个培训,应聘方如果掌握了,就知道应该怎样正确的去应聘工作. 3. ...
- Windows平台下Flutter安装,配置,初运行。
Flutter是什么?他是谷歌根据Dark语言开源的跨平台开发依赖.和目前比较火的Reactive Native一样,一套代码能够实现两个不同平台的App.那么为什么要介绍Flutter而不是在国内大 ...

