PHP使用PDO连接数据库一
PDO(php data object)扩展类库为php访问数据库定义了轻量级的、一致性的接口,它提供了一个数据库访问抽象层,这样,无论你使用什么数据库,都可以通过一致的函数执行查询和获取数据,大大简化了数据库的捉拿和,并能够屏蔽不同数据库之间的差异,使用pdo可以很方便地进行跨数据库程序的开发,以及不同数据库间的移植,是将来php在数据库处理方面的主要发展方向,它可以支持mysql,postgresql,oracle,mssql等多种数据库
使用PDO连接mysql
$dsn = "mysql:dbname=testdb;host=127.0.0.1"; //连接MySQL数据库的DSN
$user = "dbuser"; //MySQL数据库的用户名
$password = "dbpass"; //MySQL数据库的密码
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo "数据库连接失败: " . $e->getMessage();
}
//设置持久连接的选项数组作为最后一个参数,可以一起设置多个元素
//PDO::ATTR_PERSISTENT => true用于设置持久化连接,如果是在对象初始化之后
//用 PDO::setAttribute() 设置此属性,则驱动程序将不会使用持久连接。
$opt = array(PDO::ATTR_PERSISTENT => true);
try {
$db = new PDO("mysql:host=localhost;dbname=test","dbuser","passwrod",$opt);
} catch (PDOException $e) {
echo "数据库连接失败: " .$e->getMessage();
}
PDO::ATTR_ERRMODE
1.PDO::ERRMODE_SILENT 0
2.PDO::ERRMODE_WARNING 1
3.PDO::ERRMODE_EXCEPTION 2
PDO::ATTR_AUTOCOMMIT
1.0 //关闭自动提交
2.1 //开启自动提交
PDO::ATTR_DEFAULT_FETCH_MODE
1.PDO::FETCH_ASSOC 2
2.PDO::FETCH_NUM 3
3.PDO::FETCH_BOTH 4
4.PDO::FETCH_OBJ 5
在创建了PDO对象连接数据库之后,可以使用如下方法获取服务端数据库的属性值。
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$pdo->setAttribute(3,2);
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);//$pdo->setAttribute(0,0);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
//$pdo->setAttribute(19,2);
echo "
PDO是否关闭自动提交功能:". $pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);
echo "
当前PDO的错误处理的模式:". $pdo->getAttribute(PDO::ATTR_ERRMODE);
echo "
表字段字符的大小写转换: ". $pdo->getAttribute(PDO::ATTR_CASE);
echo "
与连接状态相关特有信息: ". $pdo->getAttribute(PDO::ATTR_CONNECTION_STATUS);
echo "
空字符串转换为SQL的null:". $pdo->getAttribute(PDO::ATTR_ORACLE_NULLS);
echo "
应用程序提前获取数据大小:".$pdo->getAttribute(PDO::ATTR_PERSISTENT);
echo "
与数据库特有的服务器信息:".$pdo->getAttribute(PDO::ATTR_SERVER_INFO);
echo "
数据库服务器版本号信息:". $pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
echo "
数据库客户端版本号信息:". $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION);
使用$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, flase);
可以设置服务端数据库的属性值
PDO::ATTR_ERRMODE=>错误处理模式:(3)
PDO::ERRMODE_SILENT:不报错误(忽略)(0)
PDO::ERRMODE_WARNING:以警告的方式报错(1)
PDO::ERRMODE_EXCEPTION:以异常的方式报错(推荐使用)(2)
设置方式:2种
在构造时初始化错误模式
通过pdo对象的setAttribute()方法设置。
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
面向过程
$con->errorCode():SQL
语句错误代码
$con->errorInfo():
错误信息
面向对象
捕获PDOException异常对象
警告模式
<?php
$user = "root";
$pass = "****";
$dsn = "mysql:host=localhost;dbname=msgBoard";
try {
$pdo = new PDO($dsn, $user, $pass);
}catch(PDOException $e){
echo "".$e->getMessage();
exit;
}
var_dump($pdo);
$pdo ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
echo $pdo->getAttribute(PDO::ATTR_ERRMODE)."<br />";
//在$pdo前面加@可以屏蔽掉错误信息,不过不推荐使用
$affected_rows = @$pdo->exec("delete from helloworld");
?>
使用try-catche也是一种捕获异常的方式,但是并不好用
异常模式,最常用。
<?php
$user = "root";
$pass = "****";
$dsn = "mysql:host=localhost;dbname=msgBoard";
try {
$pdo = new PDO($dsn, $user, $pass);
$pdo ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}catch(PDOException $e){
echo "连接错误:".$e->getMessage();
exit;
}
//如果将错误模式设置为ERRMODE_WARNING,异常也还是无法捕获,只会输出警告
//只用将错误模式设置为ERRMODE_EXCEPTION,try catch才会正确输出异常的错误信息
try{
$affected_rows = $pdo->exec("delete from helloworld");
}catch(PDOException $e){
echo "错误信息: ".$e->getMessage();
}
echo "ok!";
?>