文档章节

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

phpweishunlong
 phpweishunlong
发布于 2017/05/14 23:32
字数 461
阅读 3
收藏 1
点赞 0
评论 0
<?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
码字总数 26259
作品 0
广州
程序员
PHP PDOStatement对象bindpram()、bindvalue()和bindcolum

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

开元中国2015 ⋅ 2015/07/31 ⋅ 0

PHP5中PDO的简单使用

PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的php_mysql.dll之类的了...

Junn ⋅ 2012/09/26 ⋅ 0

pdo部分用法

我们使用setFetchMode方法来设置获取结果集的返回值的类型,同样类型还有: PDO::FETCH_ASSOC -- 关联数组形式PDO::FETCH_NUM -- 数字索引数组形式PDO::FETCH_BOTH -- 两者数组形式都有,这是...

欣儿 ⋅ 2013/12/28 ⋅ 0

web人力资源信息系统开发日志②

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

人可工作室 ⋅ 2017/07/09 ⋅ 0

简单的PHP框架--M-Framework

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

血荐轩辕 ⋅ 2013/09/23 ⋅ 0

写一个“特殊”的查询构造器 - (一、程序结构,基础封装)

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

MrQ被抢注了 ⋅ 05/11 ⋅ 0

还是php框架pdo预处理类的问题

别人的框架使用多了,对基本语法和底层原理会有点生疏.一直更新的自己的一个小框架,不断的扩充和修正.想把数据操作类升级成pdo预处理的.有人推介medoo,挺小巧的,但是我看到源码中增删改查方法...

manbudezhu ⋅ 2016/07/26 ⋅ 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 ⋅ 15

【转】PDO函数属性详解

PHP官方文档关于PDO的翻译已经部分完成了,可以直接去查看官方文档了 http://php.net/manual/zh/book.pdo.php PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和m...

狗头666 ⋅ 2012/02/15 ⋅ 0

怎么一步步编写简单的PHP的Framework(十七)

由于模型中D这一部分是比较基础的,所以我们先把D这一部分做了。 D中最重要的是驱动类的编写,所以我们就先写驱动类,由于在驱动类中需要用到日志,所以我们先做一个简单的Logger类,这个类只...

阳光test ⋅ 2012/12/14 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

笔试题之Java基础部分【简】【一】

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他 1.length、length()和size() length针对...

anlve ⋅ 14分钟前 ⋅ 1

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 38分钟前 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 43分钟前 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 8

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部