php操作数据库之PDO

增、删、改

<?php 
header("content-type:text/html;charset=utf-8");
/*
PDO 与连接相关的选项
    exec()  返回 手影响行数 增删改
    query() 返回对象 查
 */

//PDO的使用
try {
    //实例化PDO对象  参数: DSN User Pass
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');

    //设置字符集
    $pdo->query('set names utf8');

    //设置属性
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch (PDOException $e) {
    echo $e->getMessage();
    exit;
}
echo '<hr>';    

try {
    //增
    $sql = "INSERT INTO user VALUES(null, 't6', '0', '18', '上海')";
    $rows = $pdo->exec($sql);
    $id = $pdo->lastInsertId();
    echo "共插入{$rows}条记录<br>";
    echo "自增ID为:{$id}<br>";

    //改
    $sql = "UPDATE user SET name='p2' WHERE id='$id'";
    $rows = $pdo->exec($sql);
    echo "共更新了{$rows}条记录<br>";

    //删
    $sql = "DELETE FROM user WHERE id='$id'";
    $rows = $pdo->exec($sql);
    echo "共删除了{$rows}条记录<br>";

} catch (Exception $e) {
    echo $e->getMessage();
    exit;
}

查1 获取查询数组遍历

<?php 
header("content-type:text/html;charset=utf-8");
/*
PDO 与连接相关的选项
    query() 返回PDOStatement对象 
    处理结果集
        fetch() 单条数据/首条/一维数组
        fetchAll() 所有数据/二维数组

        属性: PDO::ATTR_DEFAULT_FETCH_MODE
        值: PDO::FETCH_ASSOC 关联
            PDO::FETCH_NUM 索引
            PDO::FETCH_OBJ 对象
            PDO::FETCH_BOTH 混合
 */

//PDO的使用
try {
    //实例化PDO对象  参数: DSN User Pass
     $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');

    //设置字符集
    $pdo->query('set names utf8');

    /*//设置属性
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);//关联
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);//索引
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);//对象
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_BOTH);//混合数组(默认的)*/

} catch (PDOException $e) {
    echo $e->getMessage();
    exit;
}
echo '<hr>';

try {
   // SQL
   $sql = "SELECT * FROM user";
   $stmt = $pdo->query($sql);

   //单条数据
   $rows = $stmt->fetch();
   //所有数据
   $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

   foreach ($rows as $k => $v) {
       echo $v['id'].':';
       echo $v['name'].':';
       echo $v['sex'].':';
       echo $v['age'].':';
       echo $v['province'].'<br>';
   }

} catch (Exception $e) {
    echo $e->getMessage();
    exit;
}

查2 直接遍历PDOStatement对象

<?php 
header("content-type:text/html;charset=utf-8");

//PDO的使用
//使用foreach遍历 PDOStatement对象
try {
    //实例化PDO对象  参数: DSN User Pass
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');

    //设置字符集
    $pdo->query('set names utf8');

    //设置属性
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);//关联


} catch (PDOException $e) {
    echo $e->getMessage();
    exit;
}
echo '<hr>';

try {
   // SQL
   $sql = "SELECT * FROM user";
   $stmt = $pdo->query($sql);

   //所有数据
   // $rows = $stmt->fetch(PDO::FETCH_ASSOC);

   foreach ($stmt as $k => $v) {
       echo $v['id'].':';
       echo $v['name'].':';
       echo $v['sex'].':';
       echo $v['age'].':';
       echo $v['province'].'<br>';
   }

} catch (Exception $e) {
    echo $e->getMessage();
    exit;
}

预处理

好处:
1).对用户的数据 进行过滤,用于提高安全性
2).提高批量操作的性能

<?php 
header("content-type:text/html;charset=utf-8");
/*
PDO预处理
    预处理SQL的方式
        1.  ?
        2.  :
    绑定参数的方式
        1. bindValue()
        2. bindParam()
        3. execute(array())
 */

//实例化PDO
try {
    $pdo = new PDO(DSN, USER, PASS);
    $pdo->exec("set names utf8");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo $e->getMessage();
    exit;
}

//预处理
try {
    // 1.定义SQL,关键部分 使用在占位符 代替 :
    $sql = "INSERT INTO user (name,age,sex) VALUES(:name,:age,:sex)";

    // 2.预处理SQL ,返回的是PDOStatement对象
    $stmt = $pdo->prepare($sql);

    // 4.正式试行SQL
    $stmt->execute(array(':name'=>'alan','age'=>'18','sex'=>'男'));

    $rows = $stmt->rowCount();//获取受影响行数
    $id = $pdo->lastInsertId();//自增ID
    echo "共插入{$rows}条数据,自增ID为:{$id}";

} catch (PDOException $e) {
    echo $e->getMessage();
    exit;
}

PDO事务处理

<?php 
header("content-type:text/html;charset=utf-8");
/*
PDO 的 事务
事务:
将多条SQL操作(增删改),作为一个整体的单元来操作,都执行成功则成功,有一条失败,则都是失败
mysql的事务
    begin 开启一个事务的回滚点
    rollback 回滚一个事务,回到begin前的样子
    commit 提交一个事务,只有被提交的事务,才会真正的被执行到数据库里

 */

//实例化PDO
try {
    $pdo = new PDO(DSN, USER, PASS);
    $pdo->exec("set names utf8");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //设置关闭自动提交
    $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
    //开启事务
    $pdo->beginTransaction();

} catch (PDOException $e) {
    echo $e->getMessage();
    exit;
}


try {
    //批量操作
    $data = array(
        array('alan1','0','18'),
        array('alan2','2','20'),
        array('alan3','1','27'),
        );

    $sql = "INSERT INTO user (name, sex, age) VALUES (?,?,?)";
    $stmt = $pdo->prepare($sql);
    $count = 0;//统计插入条数
    $ids = array();//记录自增ID

    foreach ($data as $v) {
        $stmt->execute($v);
        $count += $stmt->rowCount();//总执行的次数
        $ids[] = $pdo->lastInsertId();//自增ID们
    }
    //成功则  提交事务
    $pdo->commit();

    echo "共插入{$count}条数据<br>";
    var_dump($ids);

} catch (PDOException $e) {
    //回滚一个事务
    $pdo->rollback();
    echo $e->getMessage();
    exit;
}
文章来源: php操作数据库之PDO

人吐槽 人点赞

猜你喜欢

发表评论

用户名: 密码:
验证码: 匿名发表

你可以使用这些语言

查看评论:php操作数据库之PDO