青风百里

PHP PDO入门
今天学习了PHP中文网的PDO入门教程,在这里作一个笔记一.创建数据库主键记得设置为自增,create_time和...
扫描右侧二维码阅读全文
28
2018/05

PHP PDO入门

今天学习了PHP中文网的PDO入门教程,在这里作一个笔记

一.创建数据库


  • 主键记得设置为自增,create_timeupdate_time字段设置为varchar类型
    创建数据库
  • 填充测试数据
    填充测试数据

二.连接数据库


  • 例1
<?php
//定义基本连接参数
$dbType = 'mysql';//数据库类型
$host = 'localhost';//数据库地址
$dbName = 'Users';//数据库名称
$userName = 'homestead';//数据库用户名
$pwd = 'secret';//数据库密码

//配置数据源DSN
$dsn = "{$dbType}:host={$host};dbname={$dbName}";

//使用try catch结构连接数据库,好处是如果出错可以抛出异常,当然不用也可以
try{
    $pdo = new PDO($dsn, $userName, $pwd);
    echo '操作成功';
}catch(PDOException $e){
    die('操作失败:'.$e->getMessage());
}

连接成功

三.插入数据


  • 例2
<?php
//定义基本连接参数
$dbType = 'mysql';//数据库类型
$host = 'localhost';//数据库地址
$dbName = 'Users';//数据库名称
$userName = 'homestead';//数据库用户名
$pwd = 'secret';//数据库密码

//配置数据源DSN
$dsn = "{$dbType}:host={$host};dbname={$dbName}";

//插入数据
try{
    $pdo = new PDO($dsn, $userName, $pwd);
    $create_time = time();
    $sql = "INSERT Staff (name, email, tel, create_time) VALUES ('Jobs', 'jobs@gmail.com', '14536475757', {$create_time})";
    $num = $pdo->exec($sql);//使用pdo对象中的exec()方法执行sql语句,返回受影响的记录数
    $insertID = $pdo->lastInsertId();//返回新增的主键ID
    if ($num > 0){
        echo '成功添加了'.$num.'条数据,新增的主键ID是'.$insertID;
    }
}catch(PDOException $e){
    die('操作失败:'.$e->getMessage());
}

成功插入数据

  • 查看数据表
    查看数据表

四.更新数据


  • 例3
<?php
//定义基本连接参数
$dbType = 'mysql';//数据库类型
$host = 'localhost';//数据库地址
$dbName = 'Users';//数据库名称
$userName = 'homestead';//数据库用户名
$pwd = 'secret';//数据库密码

//配置数据源DSN
$dsn = "{$dbType}:host={$host};dbname={$dbName}";

//更新数据
try{
    $pdo = new PDO($dsn, $userName, $pwd);
    $update_time = time();
    $sql = "UPDATE Staff SET email = 'jack@qq.com', update_time = {$update_time} where id = 1";
    $num = $pdo->exec($sql);//使用pdo对象中的exec()方法执行sql语句,返回受影响的记录数
    if ($num > 0){
        echo '成功更新了'.$num.'条数据';
    }
}catch(PDOException $e){
    die('操作失败:'.$e->getMessage());
}

更新数据

  • 查看数据表
    查看数据表

五.硬删除数据


  • 例4
  • 不推荐,通常使用软删除,也就是使用更新替代删除
<?php
//定义基本连接参数
$dbType = 'mysql';//数据库类型
$host = 'localhost';//数据库地址
$dbName = 'Users';//数据库名称
$userName = 'homestead';//数据库用户名
$pwd = 'secret';//数据库密码

//配置数据源DSN
$dsn = "{$dbType}:host={$host};dbname={$dbName}";

//删除数据
try{
    $pdo = new PDO($dsn, $userName, $pwd);
    $update_time = time();
    $sql = "DELETE FROM Staff where id = 5";
    $num = $pdo->exec($sql);//使用pdo对象中的exec()方法执行sql语句,返回受影响的记录数
    if ($num > 0){
        echo '成功删除了'.$num.'条数据';
    }
}catch(PDOException $e){
    die('操作失败:'.$e->getMessage());
}

删除数据

  • 查看数据表
    查看数据表

六.使用fetch()方法获取单条记录


  • 例5
  • 值得注意的是:

    • 这里不再使用exec()方法,而是使用方法query()来执行sql语句
    • 查询结果放在了PDOStatement对象中,statement翻译为结算单
    • 使用$result->setFetchMode(PDO::FETCH_ASSOC)设置成关联数组模式,注意这里$result此时是一个PDOStatement对象
    • 每执行一次$result->fetch()就会输出一条查询结果,所以这里使用while循环,将结果全部输出
<?php
//定义基本连接参数
$dbType = 'mysql';//数据库类型
$host = 'localhost';//数据库地址
$dbName = 'Users';//数据库名称
$userName = 'homestead';//数据库用户名
$pwd = 'secret';//数据库密码

//配置数据源DSN
$dsn = "{$dbType}:host={$host};dbname={$dbName}";

//查询数据
try{
    $pdo = new PDO($dsn, $userName, $pwd);
    $sql = "SELECT * FROM Staff";
    $result = $pdo->query($sql);//使用pdo对象中的query()方法执行sql语句,返回PDOStatement对象
    if ($result && $result->rowCount() > 0){
        $result->setFetchMode(PDO::FETCH_ASSOC);
        while($row = $result->fetch()){
            var_dump($row);
        }
    }
}catch(PDOException $e){
    die('操作失败:'.$e->getMessage());
}

查询结果

七.使用fetchAll()方法获取全部记录


  • 例6
  • 值得注意的是:

    • 这里不再使用exec()方法,而是使用方法query()来执行sql语句
    • 查询结果放在了PDOStatement对象中,statement翻译为结算单
    • 使用$result->setFetchMode(PDO::FETCH_ASSOC)设置成关联数组模式,注意这里$result此时是一个PDOStatement对象
    • 这里使用了$result->fetchAll()方法查询出所有的记录,并将结果保存在$rows中,这里$rows是一个关联数组,然后使用foreach语句遍历该数组
<?php
//定义基本连接参数
$dbType = 'mysql';//数据库类型
$host = 'localhost';//数据库地址
$dbName = 'Users';//数据库名称
$userName = 'homestead';//数据库用户名
$pwd = 'secret';//数据库密码

//配置数据源DSN
$dsn = "{$dbType}:host={$host};dbname={$dbName}";

//查询数据
try{
    $pdo = new PDO($dsn, $userName, $pwd);
    $sql = "SELECT * FROM Staff";
    $result = $pdo->query($sql);//使用pdo对象中的query()方法执行sql语句,返回PDOStatement对象
    if ($result && $result->rowCount() > 0){
        $result->setFetchMode(PDO::FETCH_ASSOC);
        $rows = $result->fetchAll();
        foreach ($rows as $row){
            var_dump($row);
        }
    }
}catch(PDOException $e){
    die('操作失败:'.$e->getMessage());
}

查询结果

八.直接处理对象结果集


  • 例7
  • 这里不再使用$result->fetch()方法,也不使用$result->fetchAll()方法,我的理解是直接遍历PDOStatement对象,也就是遍历$result
  • 老师说不推荐使用这个方法,为什么呢?我还要去探究
<?php
//定义基本连接参数
$dbType = 'mysql';//数据库类型
$host = 'localhost';//数据库地址
$dbName = 'Users';//数据库名称
$userName = 'homestead';//数据库用户名
$pwd = 'secret';//数据库密码

//配置数据源DSN
$dsn = "{$dbType}:host={$host};dbname={$dbName}";

//查询数据
try{
    $pdo = new PDO($dsn, $userName, $pwd);
    $sql = "SELECT * FROM Staff";
    $result = $pdo->query($sql);//使用pdo对象中的query()方法执行sql语句,返回PDOStatement对象
    if ($result && $result->rowCount() > 0){
        $result->setFetchMode(PDO::FETCH_ASSOC);
        foreach ($result as $row){
            var_dump($row);
        }
    }
}catch(PDOException $e){
    die('操作失败:'.$e->getMessage());
}

查询结果

九.预处理

  • 例8
  • 本例以更新为例
<?php
//定义基本连接参数
$dbType = 'mysql';//数据库类型
$host = 'localhost';//数据库地址
$dbName = 'Users';//数据库名称
$userName = 'homestead';//数据库用户名
$pwd = 'secret';//数据库密码

//配置数据源DSN
$dsn = "{$dbType}:host={$host};dbname={$dbName}";

//更新数据
try{
    $pdo = new PDO($dsn, $userName, $pwd);
    $sql = "UPDATE Staff SET email=:email WHERE id = 1";
    $stmt = $pdo->prepare($sql);//使用pdo对象中的prepare()方法执行sql语句,返回一个预处理对象
    $num = $stmt->execute([':email' => 'jack@gmail.com']);//执行$stmt预处理对象中的excute()方法,返回受影响的记录数
    if ($num > 0){
        echo '成功更新了'.$num.'条记录';
    }
}catch(PDOException $e){
    die('操作失败:'.$e->getMessage());
}

更新结果

  • 查看数据表
    查看数据表
Last modification:May 30th, 2018 at 12:24 am

Leave a Comment