Blogger Information
Blog 37
fans 2
comment 0
visits 26447
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
自己搞了一天DB类 修改了一些东西 终于成功了
世纪天城
Original
1222 people have browsed it

自己搞了一天DB类 修改了一些东西 终于成功了  大家来看看如何   讨论讨论



实例

<?php
class Db {

    //数据库的连接对象
    protected $pdo = null;

    // 数据表名
//    protected $table;

    // 构造方法: 连接数据库,并设置默认数据表名称
    public function __construct($dsn, $user, $password){
        $this->pdo = new \PDO($dsn, $user, $password);
//        $this->table = $table;
    }

    // 读取
    public function read($table,$where='', $fields='*'){
       $sql = 'SELECT ';
       if ($fields == '*'){
           $sql .= '* FROM ';
        }else{
           $sql .= $fields . ' FRPM ';
       }
       if ($table){
           $sql .= $table;
       }
       $sql .= $this->table;
       if (!$where == ''){
           $sql .= ' WHERE '.$where;
       }
        print_r($sql);
        echo '<br>';

        $stmt = $this->pdo->prepare($sql);

        if($stmt->execute()){
            if($stmt->rowCount()>0){
                $stmt->setFetchMode(PDO::FETCH_ASSOC);
                //返回一个二维数组
                return $stmt->fetchAll();
            }
        } else {
            return false;
        }

    }

    // 新增, 参数是数组: 新记录的键值对
    public function create($table,$data){
        // 字段列表
        $fields = ' (name,alias)';
        // 值列表
        $values = '(:name,:alias)';
        // 创建SQL语句
        $sql = 'INSERT INTO '.$table.$this->table.$fields.' VALUES '.$values;
        print_r( $sql);
        // 预处理执行新增操作
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($data);

        // 返回新增数量, 新增记录的ID组成的数组
        return [
            'count'=>$stmt->rowCount(),
            'id'=>$this->pdo->lastInsertId()
        ];
    }

    // 更新, 为了数据安全, 不允许无条件更新
    public function update($table,$data, $where){
        // 难点在于SET 参数的处理上,利用传入的$data数组,进行拆装

        // 获取数组的键名组成的数组
        $keyArr = array_keys($data);
        $set = '';
        // 遍历键名表示的字段列表,拼装预处理需要的sql语句,注意占符符的表示
        foreach ($keyArr as $value) {
            $set .= $value . ' = :' .$value. ', ';
//            print_r($set);
        }
        // 去掉最后一个逗号, 注意每个逗号后有一个空格,去除时也要带上这个空格
        $set = rtrim($set,', ');

        // 预处理执行更新操作
        $sql = 'UPDATE '.$table.' SET '.$set .' WHERE ' .$where;
        print_r($sql);
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($data);

        // 返回被更新的记录数量
        return $stmt->rowCount();
    }

    // 删除: 与更新一样, 这也是危险的写操作, 不允许无条件删除
    public function delete($table,$where){
        // 预处理执行删除操作
        $sql = 'DELETE FROM '.$table.' WHERE '.$where;

        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->rowCount();
    }
}
$dsn = 'mysql:host=localhost;dbname=cms';
$user = 'root';
$password = 'root';
$db = new Db($dsn, $user, $password);
//$a = $db->read('category');
//print_r($a);

// 新增数据
$data = [
    'name'=>'kh',
    'alias'=>'科幻电影'
];
//$res = $db->create('category',$data);
//echo '成功新增'.$res['count'].'条记录,最新记录的主键ID是: '.$res['id'];

// 更新记录
$data = [
    'alias'=>'搞怪电影',
    'name'=>'gg',
];
$where = 'cate_id = 6';
//echo '成功更新了: ' .$db->update('category',$data, $where). ' 条记录';

// 删除记录
$where = 'cate_id = 9';
//echo '成功删除了: ' .$db->delete('category',$where). ' 条记录';

运行实例 »

点击 "运行实例" 按钮查看在线实例


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post