1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 <title>无标题文档</title> 5 </head> 6 7 <body> 8 /* 9 PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能。 注意利用 PDO 扩展自身并不能实现任何数据库功能;必须使用一个 具体数据库的 PDO 驱动 来访问数据库服务。 10 11 PDO 提供了一个 数据访问 抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDO 不不提供 数据库 抽象层;它不会重写 SQL,也不会模拟缺失的特性。如果需要的话,应该使用一个成熟的抽象层。 12 */ 13 <?php 14 15 //定义数据库 16 //连接是通过创建 PDO 基类的实例而建立的。不管使用哪种驱动程序,都是用 PDO 类名。构造函数接收用于指定数据库源(所谓的 DSN)以及可能还包括用户名和密码(如果有的话)的参数。 17 18 19 /*dsn 20 数据源名称或叫做 DSN,包含了请求连接到数据库的信息。 21 22 通常,一个 DSN 由 PDO 驱动名、紧随其后的冒号、以及具体 PDO 驱动的连接语法组成。更深入的信息能从 PDO 具体驱动文档找到*/ 23 24 //The dsn 参数支持三种不同的方式 创建一个数据库连接: 25 //1、dsn 包含完整的DSN。 2、uri:file:///path/to/dsnfile 3、Note: 别名必须得在 php.ini 中定义了,不能是在 .htaccess 或 httpd.conf 中 。 26 27 /*username 28 DSN字符串中的用户名。对于某些PDO驱动,此参数为可选项。 29 password 30 DSN字符串中的密码。对于某些PDO驱动,此参数为可选项。 31 driver_options 32 一个具体驱动的连接选项的键=>值数组。 33 */ 34 35 $dsn= "mysql:dbname=mingzu;host=localhost";//定义数据库 36 //造pdo对象 37 $pdo= new PDO($dsn,"root","1234"); 38 //写sql语句 39 $sql ="select * from Info"; 40 41 //准备执行sql语句 42 $st= $pdo->prepare($sql); 43 44 //执行sql语句 45 if($st->execute()) 46 { 47 print_r($st->fetch(pdo::FETCH_NUM));//查询所有数据,返回数组 48 49 //var_dump($st->fetchColumn(1));//查询一列,返回字符串 50 51 //从结果中取出一列数据,返回一个实体类的数据 52 53 } 54 else 55 { 56 echo "执行失败!"; 57 } 58 59 60 ?> 61 62 63 <?php 64 //如果有任何连接错误,将抛出一个 PDOException 异常对象。如果想处理错误状态,可以捕获异常,或者选择留给通过 set_exception_handler() 设置的应用程序全局异常处理程序。 65 /* try { 66 $dbh = new PDO ( 'mysql:host=localhost;dbname=test' , $user , $pass ); 67 foreach( $dbh -> query ( 'SELECT * from FOO' ) as $row ) { 68 print_r ( $row ); 69 } 70 $dbh = null ; 71 } catch ( PDOException $e ) { 72 print "Error!: " . $e -> getMessage () . "<br/>" ; 73 die(); 74 }*/ 75 76 /*1. PDO::prepare() - Prepares a statement for execution and returns a statement object 77 2. PDOStatement::execute() - 执行一条预处理语句 78 3. PDOStatement::fetchAll() - 返回一个包含结果集中所有行的数组 79 4. PDOStatement::fetchColumn() - 从结果集中的下一行返回单独的一列。 80 5. PDOStatement::fetchObject() - 获取下一行并作为一个对象返回。 81 6. PDOStatement::setFetchMode() - 为语句设置默认的获取模式。*/ 82 83 ?> 84 85 </body> 86 </html>
/*简单的总结一下上面的操作:
查询操作主要是PDO::query()、PDO::exec()、PDO::prepare()。PDO::query()主要是用于有记录结果返回的操作,特别是SELECT操作,PDO::exec()主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、DELETE等操作,它返回的结果是当前操作影响的列数。PDO::prepare()主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大,不是本文能够简单说明白的,大家可以参考手册和其他文档。
获取结果集操作主要是:PDOStatement::fetchColumn()、PDOStatement::fetch()、PDOStatement::fetchALL()。PDOStatement::fetchColumn() 是获取结果指定第一条记录的某个字段,缺省是第一个字段。PDOStatement::fetch() 是用来获取一条记录,PDOStatement::fetchAll()是获取所有记录集到一个中,获取结果可以通过PDOStatement::setFetchMode来设置需要结果集合的类型。
另外有两个周边的操作,一个是PDO::lastInsertId()和PDOStatement::rowCount()。PDO::lastInsertId()是返回上次插入操作,主键列类型是自增的最后的自增ID。PDOStatement::rowCount()主要是用于PDO::query()和PDO::prepare()进行DELETE、INSERT、UPDATE操作影响的结果集,对PDO::exec()方法和SELECT操作无效。*/