牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP使用PDO连接数据库一

创建时间:2018-03-26 投稿人: 浏览次数:151

  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!";
 ?>
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。