文档章节

利用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);

© 著作权归作者所有

共有 人打赏支持
上一篇: JavaScript 函数
下一篇: Linux 常用指令
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
为什么 PHP 应该使用 PDO 方式访问数据库

很多程序员都学习过如何使用 MySQL 或 MySQLi 扩展访问数据库。在 PHP 5.1 中,有一个更好的方法。 PHP Data Objects (PDO) 提供了很多预处理语句的方法,且使用对象将使你的工作更有成效! ...

冻鱼
2013/06/16
11K
38
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

没有更多内容

加载失败,请刷新页面

加载更多

node.js学习笔记之koa框架和简单爬虫练习

Koa -- 基于 Node.js 平台的下一代 web 开发框架 koa是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 使用 koa 编写 web 应用,可以免除重复繁琐的回调...

前端小攻略
5分钟前
0
0
JavaScript中的继承及实现代码

JS虽然不像是JAVA那种强类型的语言,但也有着与JAVA类型的继承属性,那么JS中的继承是如何实现的呢? 一、构造函数继承 在构造函数中,同样属于两个新创建的函数,也是不相等的 function Fn...

peakedness丶
27分钟前
1
0
记一次面试最常见的10个Redis"刁难"问题

导读:在程序员面试过程中Redis相关的知识是常被问到的话题。作为一名在互联网技术行业打击过成百上千名的资深技术面试官,本文作者总结了面试过程中经常问到的问题。十分值得一读。 Redis在...

小刀爱编程
40分钟前
14
0
TiDB Lab 诞生记 | TiDB Hackathon 优秀项目分享

本文由红凤凰粉凤凰粉红凤凰队的成员主笔,他们的项目 TiDB Lab 在本届 TiDB Hackathon 2018 中获得了二等奖。TiDB Lab 为 TiDB 培训体系增加了一个可以动态观测 TiDB / TiKV / PD 细节的动画...

TiDB
53分钟前
4
0
当区块链遇到零知识证明

本文由云+社区发表 当区块链遇到零知识证明 什么是零知识证明 零知识证明的官方定义是能够在不向验证者任何有用的信息的情况下,使验证者相信某个论断是正确的。这个定义有点抽象,下面笔者举...

腾讯云加社区
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部