PDO是php工程师为了弥补mysqli不能操作其他数据库开发出来的一个可以操作所有数据源(Dsn)的数据库扩展类。
$pdo -> setAttribute( PDO::ATTR_AUTOCOMMIT , false );
//setAttribute设置调优常量
pdo的getAttribute获取调优常量//注意下在操作中要作为一个类的属性即PDO::XXX
PDO_ATTR_AUTOCOMMIT //获取自动连接
PDO_ATTR_CASE //强制列名为指定的大小写
PDO_ATTR_CLIENT_VERSION //当前客户端的版本
PDO_ATTR_CONNECTION_STATUS //
PDO_ATTR_DRIVER_NAME //
PDO_ATTR_ERRMODE //
PDO_ATTR_ORACLE_NULLS //
PDO_ATTR_PERSISTENT //当前是否持久链接
PDO_ATTR_PREFETCH //
PDO_ATTR_SERVER_INFO //当前服务器信息
PDO_ATTR_SERVER_VERSION //当前服务器的版本
PDO_ATTR_TIMEOUT //
//不做过多意解,详细可参考php.net查看
echo "当前是否持久链接:".$pdo -> getAttribute( PDO::ATTR_PERSISTENT )."<br />";
PDOStatement类
帮我们准一个语句和在PDO中对象的exec()以及query()相比
优点: 执行效率高
安全性更高
帮我们处理结果集
是推荐使用
//$sql = "delete from news where id in(35,36,37)";
$sql = "update news set name='vvv where id in(38,39)";
$rows = $pdo -> exec( $sql );
echo "---affected rows {$rows} ";
$pdo -> exec( "SET NAMES UTF8" );//设置字符,防止插入或者更新出现乱码
关于类的预处理技术:
$sql = "insert into user(id,name,sex)values(?,?,?)";
$ptmt = $pdo -> prepare( $sql ); //把语句放到mysql数据里面记性存储。预处理
$ptmt -> bindParam(1,$id,PDO::PARAM_STR);
$ptmt -> bindParam(2,$name,PDO::PARAM_STR);
$ptmt -> bindParam(3,$sex,PDO::PARAM_STR);
$ptmt->execute();
类的别名技术:
$sql = "insert into news(title,contents,addTime)values(:title,:contents,:date)";
$ptmt = $pdo -> prepare( $sql ); //把语句放到mysql数据里面记性存储。预处理
$ptmt->execute( array( ":title"=>"简化名子{$i}",":contents"=>"名子{$i}",":date"=>date("Y-m-d H:i:s") ) );
关于pdo的异常处理机制,无需自己太多定义,可以直接继承原有的,
通过throw抛出,catch捕抓即可