Page

[学习笔记]pdo连接mysql数据库的知识笔记

1267Anson17-01-30


pdo连接mysql数据库的知识笔记

1、自从php5.1.0开始,pdo成为默认组件,查看更多pdo驱动http://php.net/manual/zh/pdo.drivers.php


2、linux下需要开启配置extension=pdo.so,Windows下则开启extendion=php_pdo.dll

在php5.3以后,pdo自动开启;


3、主要涉及的pdo驱动

extension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_informix.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll


4、连接到mysql(处理连接错误方式)、预处理方式

<?php

    $arr = array(
        PDO::ATTR_PERSISTENT =>true  //持久连接
    );
    try {
        $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'root',$arr);
    } catch (PDOException $e) {
        print $e->getMessage();
        die();
    }
    
    //预处理操作
    $pre = $dbh->prepare('insert into table(name, age,sex) values(?, ?, ?));
    
    //预处理绑定参数
    $pre->bindParam(1, $name, PDO::PARAM_STR);
    $pre->bindParam(2, $age, PDO::PARAM_INT,3);
    $pre->bindParam(3, $sex, PDO::PARAM_STR,2); 
     
    $name = ansion;
    $age = 20;
    $sex = '男';
    
    $pre->execute(); //执行


5、PDO数据库事务处理

通俗的理解,事务即是一批数据处理语句“积蓄”起来同时生效,同时失效。


引文:

在下面例子中,假设为新员工创建一组条目,分配一个为23的ID。除了登记此人的基本数据之外,还需要记录他的工资。两个更新分别完成起来很简单,但通过封闭在 PDO::beginTransaction() 和PDO::commit() 调用中,可以保证在更改完成之前,其他人无法看到这些更改。如果发生了错误,catch 块回滚自事务启动以来发生的所有更改,并输出一条错误信息。

<?php

try {
        $dbh = new PDO('mysql:host=localhost;dbname=ansion_blog', 
        'root', 'root', array(PDO::ATTR_PERSISTENT => true));
        echo 'connected';
    } catch (Expection $e){
        die($e->getMessage());
    }
    
    try {
        //设置错误报告,抛出exceptions异常
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
        $dbh->beginTransaction();  //开始事务
        $dbh->exec("insert into staff(id, first, last) values(23,'ansion','bloggs')");
        $dbh->exec('insert into salarychange(id, amount, changedate)
         values(23, 20000, NOW()");
         
        $dbh->commit();    //提交事务
    } catch (Exception $e){
        $dbh->rollBack();   //若事务没有成功则回滚事务
        echo $e->getMessage();
    }
    
    //事务测试可以插入不存在的字段


6、调用存储过程

7、大对象




来自ansion博客

2017年1月30日