文档章节

利用PDO实现一个数据库操作类

phpweishunlong
 phpweishunlong
发布于 2017/05/14 23:32
字数 461
阅读 3
收藏 1
<?php

const HOST = 'localhost';
const USER = 'root';
const PASS = '123456';
const PORT = 3306;
const DB = 'test';//库名
const CHAR = 'utf8';//字符集
const DBTYPE = 'mysql';
//    const DBPATH = '/opt/databases/mydb.sq2';//如果是s    qlite数据库,则设置
//    const DBTYPE = 'mysql';//数据库类型
//使用PDO写一个数据库操作类
class MyPDO
{
    protected $tabName;
    protected $pdo;
    public function __construct($tabName)
    {
        $this->tabName = $tabName;

        //根据数据库的类型决定dsn内容
        $this->selectDb();

        $this->pdo = new PDO($this->dsn, USER, PASS);
    }


    public function findOne($id)
    {
        if( empty($id) || !is_numeric($id) ){
            throw new Exception('请传递查询的ID值');
        }

        $sql = "SELECT * FROM {$this->tabName} WHERE id = ?  LIMIT 1";

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

        $bool =  $stmt->bindParam(1, $id);

        $bool = $stmt->execute();

        return $stmt->fetch(PDO::FETCH_ASSOC);
    }

    /*
     * $data['name'] = 'jack';
     * $data['sex']  = 1;
     */
    public function add($data = array() )
    {

        if( !is_array($data) ){
            throw new Exception('请传递一个数组');
        }

        $num = count($data);
        $val = rtrim(str_repeat('?,', $num), ',');

        $fieldsStr = '`'.implode('`,`', array_keys($data)).'`';


        $sql = "INSERT INTO {$this->tabName}({$fieldsStr}) VALUES ($val)";

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

        $i = 1;
        foreach ($data as $k => $v){

            $stmt->bindValue($i, $v);

            $i++;
        }

        $stmt->execute();

        return $this->pdo->lastInsertId();

    }

    public function delete($id)
    {
        if( empty($id) || !is_numeric($id) ){
            throw new Exception('请传递删除的ID值');
        }

        $sql = "DELETE FROM {$this->tabName} WHERE id=:id";

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

        $stmt->bindValue(':id', $id);

        $bool = $stmt->execute();

        //返回删除行数
        return $stmt->rowCount();
    }

    //封装预处理方法
    public function exec($sql)
    {

        if($sql){
            throw new Exception('请传递SQL语句');
        }

        $this->pdo->prepare();

    }


    public function selectDb()
    {

        if( !defined('DBTYPE') ){

            throw new DBException('请配置数据库类型');
        }

        //PostgreSQl
        //pgsql:host=localhost;port=5432;dbname=testdb;user=bruce;password=mypass

        //mysql
        //mysql:host=localhost;port=3307;dbname=testdb

        //sqlite
        //sqlite:/opt/databases/mydb.sq3

        $dsn = DBTYPE.':';
        switch (DBTYPE){

            case 'sqlite':

                if( !defined('DBPATH') ) {
                    throw new DBException('你使用的是sqlite数据库,请设置常量DBPATH的值');
                }

                $dsn .= DBPATH;

            default:
                if( !defined('PORT')){
                    define('PORT', 3306);
                }

                if( !defined('HOST')){
                    throw new DBException('数据库IP没设置');
                }

                if( !defined('DB') ){
                    throw new DBException('请配置数据库库名');
                }
                //mysql:host=localhost;port=3307;dbname=testdb
                $dsn .='host='.HOST.';'.'port='.PORT.';dbname='.DB;
                break;
        }

        $this->dsn = $dsn;
    }

}

class DBException extends Exception
{

}

//    var_dump(defined('DBTYPE'));

$dbObj = new MyPDO('test');

//    var_dump($dbObj);

 $data['name'] = 'jacfffk';
 $data['money']  = 10000;
//     $data['se']  = 2;
//     $data['sddde']  = 2;
$lastId = $dbObj->add($data);
var_dump($lastId);

$oneData = $dbObj->delete(2);
var_dump($oneData);

© 著作权归作者所有

共有 人打赏支持
phpweishunlong
粉丝 1
博文 64
码字总数 26288
作品 0
广州
程序员
PHP PDOStatement对象bindpram()、bindvalue()和bindcolum

PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别 PDOStatement::bindParam ― 绑定一个参数到指定的变量名。 绑定一个PHP变量到用作预处理的SQL语句中的对应命名占位符或...

开元中国2015
2015/07/31
233
0
web人力资源信息系统开发日志②

第二阶段开发(2017年4月28日—5月20日): 开发内容:①项目框架设计、目录树形结构、数据库设计②编写Web Apps安装程序,检测运行环境、创建数据源及数据库用户信息并生成PDO配置文件(接口...

人可工作室
06/26
0
0
简单的PHP框架--M-Framework

M 是一个简单的PHP框架;包含一个名为Mlog的演示博客,M在原MyPHP框架的的基础上充分利用了PHP5.3之后版本的最新特性,对MyPHP做了大量的改进。超过90%的代码重写。 目前M正在紧张的开发中,...

血荐轩辕
2013/09/23
1K
0
写一个“特殊”的查询构造器 - (一、程序结构,基础封装)

程序的结构 本篇开始,正式进入编码实践中。首先,简单的规划下程序的结构。 如上一篇所说的,我们需要一个基类 PDODriver 用来封装 PDO 的一些公用的方法,Mysql 等每个数据库都新建一个类 ...

MrQ被抢注了
05/11
0
0
EasyDB 1.0.1正式版发布,MySQL操作类

EasyDB 1.0.1正式版发布.MySQL操作类 更新内容如下: 支持对insert/update/deldete/select的简化操作; 支持对复杂的insert/update/deldete/select SQL进行链式操作; 链式操作目前支持 fiel...

奋斗de熊猫
2016/01/14
2.9K
15

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
40分钟前
1
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
2
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
1
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部