php之pdo扩展库
来源:互联网 发布:金十网数据官网 编辑:程序博客网 时间:2024/05/20 06:28
1.安装pdo扩展库
linux: 安装php5.1以上版本时 添加 --with-pdo-mysql=/usr/local/mysql; //其中/usr/local/mysql为mysql服务器安装目录
windows:将这俩个扩展库打开 extention = php_pdo.dll; extention = php_pdo_mysql.dll; //如果是其他数据库则打开对应的扩展库
2.三个类 和 大量常量
PDO类:和数据库连接有关的类(连接,执行sql语句)
PDOStatement类:准备语句,处理结果集。编译一次多次执行提高效率高,有效避免sql注入提高安全性。 推荐使用
PDOException类:处理异常
PDO类
1.__construct( $dsn, $username, $password [, $options ] );
$dsn ( data source name ) : 'mysql: host = localhost; port = 3306; dbname = test'
$dsn 也可为在文件中: 'uri: file:///usr/local/dbconnect'
$dsn 也可通过php.ini来设置,为dsn指定别名,在代码中可直接调用别名:
[ PDO ]
pdo.dsn.msyqlpdo = ' mysql: host = localhost; dbname = test' ;
$dbh = new pdo("mysqlpdo", "test", "password");
$options调优有关的参数:
设置选项名为下标组成的关联数组,作为驱动程序特定的连接选项
2.执行sql语句exec(), query(), prepare()
exec()用来执行有影响行数的 insert/update/delete/other,返回的是影响的行数
query()用来执行查询语句 ,返回PDOStatement预处理的对象
3.错误处理模式
PDO::ERRMODE_SILENT 默认是此模式,不会输出任何错误信息,可以通过errorCode()和errorInfo()方法来获取错误信息
PDO::ERRMODE_WARNING 警告模式,开启此模式后会直接输出警告信息,当然也可以通过errorInfo()来获取错误信息
PDO::ERRMODE_EXCEPTION 异常模式,开启此模式后可以通过异常来获取错误信息。 该模式为最常用的方式,推荐此方式。
4.事务处理
$pdo -> set Attribute( PDO::ATTR_AUTOCOMMIT, 0 ); 关闭自动提交
beginTransaction() 开启事务处理
commit() 提交事务
rollback() 回滚事务
PDOStatement类
1.准备语句
$stmt = prepare($sql);
/**支持俩种占位符号
*?参数 ----------- 索引数组,按索引顺序使用
*索引参数------------ 关联数组,按名称使用,和顺序无关,用:var_name方式使用
*
*/
2.绑定参数
$stmt -> bindParam( 1, $var1 [, PDO::PARAM_STR|PDO::PARAM_INT ]);
$stmt -> bindParam( :var1, $var1 );
$stmt -> bindParam( :var2, $var2 );
3.执行语句
$stmt -> execute()
可以不绑定而直接执行此语句,只需加入一个数组参数
array( :name => "root", :password => "password" ); 对应名字参数
array("root", "password"); 对应?参数
4.操作结果集
$stmt -> fetch( [ PDO::FETCH_ASSOC | PDO::FETCH_NUM | PDO::FETCH_BOTH ] ); //一次获取一行数据,默认同时返回关联和索引的数组,可通过参数来设置返回的数组类型
$stmt -> setFetchMode( PDO::FETCH_ASSOC | PDO::FETCH_NUM | PDO::FETCH_BOTH ); //可以通过此方式来设置,那样每次获取就不需要在另外设置
$stmt -> fetchAll( ); //一次获取全部数据
$stmt -> bindColumn( "columnName", $varname [ ,PDO::PARAM_STR | PDO::PARAM_INT ] ); //通过绑定列来获取数据
$stmt -> rowCount(); //获取查询到的总记录数
$stmt -> columnCount(); //获取查询到数据的总字段数
$stmt -> getColumnMeta( $i ); //获取列的信息(包括列名name 长度len table表名等),$i列号,默认从0开始。
例子:
<?php//创建pdo对象try{ $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT, //可以在option设置错误模式 PDO::ATTR_AUTOCOMMIT => true, //开启自动提交 ); $pdo = new pdo ( "mysql: host = localhost; port = 3306; dbname = test", "root", "password", $options); $pdo -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); //也可以通过方法来设置错误模式}catch(PDOException $e){ echo "数据库连接失败:".$e->getMessage(); exit;}//使用exec方法try{ $sql = "INSERT INTO t_user (user, password) VALUES ("root", "password")"; $affected_rows = $pdo -> exec( $sql ); echo "最后插入的自动增长的ID:".$pod -> lastInsertId();}catch(PDOException $e){ echo "sql语句执行错误:".$e->getMessage();}//使用事务处理try{ $pdo -> setAttribute( PDO::ATTR_AUTOCOMMIT, 0 ); //关闭自动提交以支持事务处理 $pdo -> beginTransaction(); $price = 500; $sql1 = "UPDATE t_account SET price = price - { $price } WHERE id = 1"; $affected_rows = $pdo -> exec( $sql1 ); if($affected_rows < 1){ throw new PDOException("转出失败"); } $sql2 = "UPDATE t_account SET price = price + { $price } WHERE id = 2"; $affected_rows = $pdo -> exet( $sql2 ); echo "交易成功"; if($affected_rows < 1){ throw new PDOException("转入失败"); } $pdo -> commit();}catch(PDOException $e){ echo "sql语句执行错误".$e->getMessage(); $pdo -> rollback();}$pdo -> setAttribute( PDO::ATTR_AUTOCOMMIT, 1 ); //使用完事务处理后打开自动提交//使用query方法try{ $sql = "SELECT user, passowrd FROM t_user"; $stmt = $pdo->query( $sql ); }catch(PDOException $e){ echo "sql语句执行错误:".$e->getMessage();}//使用PDOStatement类处理非查询语句try{ //$sql = "INSERT into t_user (user, passowrd) VALUES (?, ?)"; $sql = "INSERT into t_user (user, passowrd) VALUES (:user, :password)"; $stmt = $pdo->prepare( $sql ); //绑定名字参数 $user = "root"; $password = "password"; $stmt -> bindParam( :user, $user ); $stmt -> bindParam( :password, $password ); //绑定?参数 //$stmt -> bindParam( 1, $user); //$stmt -> bindParam( 2, $password); //也可以不绑定直接执行 $stmt->execute( array( :name=>"root", :password=>"password" ) ); if($stmt->execute()){ echo "执行成功!"; echo "最后插入的ID:".$pdo->lastInsertId(); }else{ echo "执行失败!"; } }catch(PDOException $e){ echo "sql语句执行错误:".$e->getMessage();}//使用PDOStatement处理查询语句try{ $sql = "SELECT user, password FROM t_user WHERE id > :id"; $stmt = $pdo -> prepare( $sql ); $stmt -> execute( array( :id=>"100" ) ); $stmt -> setFetchMode(PDO::FETCH_ASSOC); /* while( $row = $stmt->fetch() ){ print_r( $row ); echo "<br/>"; } */ /* $stmt -> bindColumn( "user", $user, PDO::PARAM_STR); $stmt -> bindColumn( "password", $passowrd ); while( $stmt -> fetch() ){ echo "$user------$password <br/>"; } */ $data = $stmt -> fetchAll( PDO::FETCH_ASSOC ); echo "总记录数:".$stmt -> rowCount(); echo "总字段数:".$stmt -> columnCount(); for( $i = 0; $i < $stmt->columnCount(); $i++){ $field = $stmt -> getColumnMeta($i); echo $file['name']."<br/>"; }}catch(PDOException $e){ echo $e->getMessage();}?>
- php之pdo扩展库
- php扩展之PDO
- php中mysql mysqli pdo扩展库
- PHP中PDO扩展库总结
- PHP PDO扩展 ----- PDOstatement
- php 安装pdo 扩展
- PHP安装pdo扩展
- centos php pdo-mysql扩展
- php中pdo扩展安装
- ubuntu php 开启pdo扩展
- PHP数据库连接之PDO
- PHP之PDO
- php 基础之PDO
- PHP之PDO学习
- Linux 下 PHP 扩展 PDO 编译安装
- Linux 下 PHP 扩展 PDO 编译安装
- linux下PHP 的 pdo 扩展
- Linux 下 PHP 扩展 PDO 编译安装
- Find m combinations from a N set
- Spring+Hibernate 异常No Hibernate Session bound to thread, and configuration does not allow creation
- 【android】scaleType属性与ImagView中图片的显示的关系 颜色
- timus 1319. Hotel URAL 解题报告
- MFC中绘图
- php之pdo扩展库
- 1046. Shortest Distance (20)—PAT
- 【每天一个Linux命令】08. Linux中time命令的用法
- 电脑换新季让我终于脱离了盗版屌丝群
- 【xinfanqie】简单三个小步骤快速设置个性化Win8
- 高手解析:PDF格式与EXCEL格式转换的办法【绿色】
- libgdx,android游戏框架
- [SOA] Mule ESB 3.x 入门(一)—— 消息流
- schema对象介绍