使用方法

2.php

<?php

require_once "./mypdo.php";

//do something...

//查一行
$id = 3;
//$sql = "select * from tp_goods where id={$id}";
$sql = "select id,goods_name,goods_code,og_thumb,shop_price
from tp_goods where id={$id}";
$data = $pdo->query($sql, $queryMode = 'Row', $debug = false);
if ($data) {
echo "<pre>";
var_dump($data);
} else {
echo "空";
} //查多行
$id = 3;
$sql = "select * from tp_goods where id<{$id}";
$data = $pdo->query($sql, $queryMode = 'All', $debug = false);
echo "<pre>";
print_r($data); //插入 返回新插入的主键id $attr_name = 'test';
$attr_type = 1;
$attr_values = 'red,green';
$type_id = 2; $data = [
'attr_name' => $attr_name,
'attr_type' => $attr_type,
'attr_values' => $attr_values,
'type_id' => $type_id,
];
$res = $pdo->insertId("tp_attr", $data, $debug = false); if ($res) {
echo ('ok');
echo ("<br>");
echo ($res);
} else {
echo "空";
echo $res;
} //更新 $id = 23;
$where = "id=$id";
$attr_values = 'red,green22';
$type_id = 67;
$data = [
'attr_values' => $attr_values,
'type_id' => $type_id,
];
$res = $pdo->update("tp_attr", $data, $where, $debug = false); if ($res) {
echo ($res);
} else {
echo "空";
echo $res;
} //删除
$id = 29;
$where = "id>$id";
$res = $pdo->delete("tp_attr", $where, $debug = false); if ($res) {
echo ($res);
} else {
echo "空";
echo $res;
} $pdo->destruct();

mypdo.php

<?php

$pdo = DAOPDO::getInstance('localhost', 'root', 'root', 'tpshop', 'utf8');

class DAOPDO
{
protected static $_instance = null;
protected $dbName = '';
protected $dsn;
protected $dbh; /**
* 构造
*
* @return DAOPDO
*/
private function __construct($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset)
{
try {
$this->dsn = 'mysql:host=' . $dbHost . ';dbname=' . $dbName;
$this->dbh = new PDO($this->dsn, $dbUser, $dbPasswd);
$this->dbh->exec('SET character_set_connection=' . $dbCharset . ', character_set_results=' . $dbCharset . ', character_set_client=binary');
} catch (PDOException $e) {
$this->outputError($e->getMessage());
}
} /**
* 防止克隆
*
*/
private function __clone()
{} /**
* Singleton instance
*
* @return Object
*/
public static function getInstance($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset)
{
if (self::$_instance === null) {
self::$_instance = new self($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset);
}
return self::$_instance;
} /**
* Query 查询
*
* @param String $strSql SQL语句
* @param String $queryMode 查询方式(All or Row)
* @param Boolean $debug
* @return Array
*/
public function query($strSql, $queryMode = 'All', $debug = false)
{
if ($debug === true) {
$this->debug($strSql);
} $recordset = $this->dbh->query($strSql);
$this->getPDOError();
if ($recordset) {
$recordset->setFetchMode(PDO::FETCH_ASSOC);
if ($queryMode == 'All') {
$result = $recordset->fetchAll();
} elseif ($queryMode == 'Row') {
$result = $recordset->fetch();
}
} else {
$result = null;
}
return $result;
} /**
* Update 更新
*
* @param String $table 表名
* @param Array $arrayDataValue 字段与值
* @param String $where 条件
* @param Boolean $debug
* @return Int
*/
public function update($table, $arrayDataValue, $where = '', $debug = false)
{
$this->checkFields($table, $arrayDataValue);
if ($where) {
$strSql = '';
foreach ($arrayDataValue as $key => $value) {
$strSql .= ", `$key`='$value'";
}
$strSql = substr($strSql, 1);
$strSql = "UPDATE `$table` SET $strSql WHERE $where";
} else {
$strSql = "REPLACE INTO `$table` (`" . implode('`,`', array_keys($arrayDataValue)) . "`) VALUES ('" . implode("','", $arrayDataValue) . "')";
}
if ($debug === true) {
$this->debug($strSql);
} $result = $this->dbh->exec($strSql);
$this->getPDOError();
return $result;
} /**
* Insert 插入 返回受影响的行数
*
* @param String $table 表名
* @param Array $arrayDataValue 字段与值
* @param Boolean $debug
* @return Int
*/
public function insert($table, $arrayDataValue, $debug = false)
{
$this->checkFields($table, $arrayDataValue);
$strSql = "INSERT INTO `$table` (`" . implode('`,`', array_keys($arrayDataValue)) . "`) VALUES ('" . implode("','", $arrayDataValue) . "')";
if ($debug === true) {
$this->debug($strSql);
} $result = $this->dbh->exec($strSql);
// $act_id = $this->dbh->lastInsertId(); //获取最新插入的数据的id
$this->getPDOError(); return $result;
} /**
* Insert 插入 返回新插入的主键id
*
* @param String $table 表名
* @param Array $arrayDataValue 字段与值
* @param Boolean $debug
* @return Int
*/
public function insertId($table, $arrayDataValue, $debug = false)
{
$this->checkFields($table, $arrayDataValue);
$strSql = "INSERT INTO `$table` (`" . implode('`,`', array_keys($arrayDataValue)) . "`) VALUES ('" . implode("','", $arrayDataValue) . "')";
if ($debug === true) {
$this->debug($strSql);
} $result = $this->dbh->exec($strSql);
$act_id = $this->dbh->lastInsertId(); //获取最新插入的数据的id
$this->getPDOError(); return $act_id;
} /**
* Replace 覆盖方式插入
*
* @param String $table 表名
* @param Array $arrayDataValue 字段与值
* @param Boolean $debug
* @return Int
*/
public function replace($table, $arrayDataValue, $debug = false)
{
$this->checkFields($table, $arrayDataValue);
$strSql = "REPLACE INTO `$table`(`" . implode('`,`', array_keys($arrayDataValue)) . "`) VALUES ('" . implode("','", $arrayDataValue) . "')";
if ($debug === true) {
$this->debug($strSql);
} $result = $this->dbh->exec($strSql);
$this->getPDOError();
return $result;
} /**
* Delete 删除
*
* @param String $table 表名
* @param String $where 条件
* @param Boolean $debug
* @return Int
*/
public function delete($table, $where = '', $debug = false)
{
if ($where == '') {
$this->outputError("'WHERE' is Null");
} else {
$strSql = "DELETE FROM `$table` WHERE $where";
if ($debug === true) {
$this->debug($strSql);
} $result = $this->dbh->exec($strSql);
$this->getPDOError();
return $result;
}
} /**
* execSql 执行SQL语句,debug=>true可打印sql调试
*
* @param String $strSql
* @param Boolean $debug
* @return Int
*/
public function execSql($strSql, $debug = false)
{
if ($debug === true) {
$this->debug($strSql);
} $result = $this->dbh->exec($strSql);
$this->getPDOError();
return $result;
} /**
* 获取字段最大值
*
* @param string $table 表名
* @param string $field_name 字段名
* @param string $where 条件
*/
public function getMaxValue($table, $field_name, $where = '', $debug = false)
{
$strSql = "SELECT MAX(" . $field_name . ") AS MAX_VALUE FROM $table";
if ($where != '') {
$strSql .= " WHERE $where";
} if ($debug === true) {
$this->debug($strSql);
} $arrTemp = $this->query($strSql, 'Row');
$maxValue = $arrTemp["MAX_VALUE"];
if ($maxValue == "" || $maxValue == null) {
$maxValue = 0;
}
return $maxValue;
} /**
* 获取指定列的数量
*
* @param string $table
* @param string $field_name
* @param string $where
* @param bool $debug
* @return int
*/
public function getCount($table, $field_name, $where = '', $debug = false)
{
$strSql = "SELECT COUNT($field_name) AS NUM FROM $table";
if ($where != '') {
$strSql .= " WHERE $where";
} if ($debug === true) {
$this->debug($strSql);
} $arrTemp = $this->query($strSql, 'Row');
return $arrTemp['NUM'];
} /**
* 获取表引擎
*
* @param String $dbName 库名
* @param String $tableName 表名
* @param Boolean $debug
* @return String
*/
public function getTableEngine($dbName, $tableName)
{
$strSql = "SHOW TABLE STATUS FROM $dbName WHERE Name='" . $tableName . "'";
$arrayTableInfo = $this->query($strSql);
$this->getPDOError();
return $arrayTableInfo[0]['Engine'];
}
//预处理执行
public function prepareSql($sql = '')
{
return $this->dbh->prepare($sql);
}
//执行预处理
public function execute($presql)
{
return $this->dbh->execute($presql);
} /**
* pdo属性设置
*/
public function setAttribute($p, $d)
{
$this->dbh->setAttribute($p, $d);
} /**
* beginTransaction 事务开始
*/
public function beginTransaction()
{
$this->dbh->beginTransaction();
} /**
* commit 事务提交
*/
public function commit()
{
$this->dbh->commit();
} /**
* rollback 事务回滚
*/
public function rollback()
{
$this->dbh->rollback();
} /**
* transaction 通过事务处理多条SQL语句
* 调用前需通过getTableEngine判断表引擎是否支持事务
*
* @param array $arraySql
* @return Boolean
*/
public function execTransaction($arraySql)
{
$retval = 1;
$this->beginTransaction();
foreach ($arraySql as $strSql) {
if ($this->execSql($strSql) == 0) {
$retval = 0;
} }
if ($retval == 0) {
$this->rollback();
return false;
} else {
$this->commit();
return true;
}
} /**
* checkFields 检查指定字段是否在指定数据表中存在
*
* @param String $table
* @param array $arrayField
*/
private function checkFields($table, $arrayFields)
{
$fields = $this->getFields($table);
foreach ($arrayFields as $key => $value) {
if (!in_array($key, $fields)) {
$this->outputError("Unknown column `$key` in field list.");
}
}
} /**
* getFields 获取指定数据表中的全部字段名
*
* @param String $table 表名
* @return array
*/
private function getFields($table)
{
$fields = array();
$recordset = $this->dbh->query("SHOW COLUMNS FROM $table");
$this->getPDOError();
$recordset->setFetchMode(PDO::FETCH_ASSOC);
$result = $recordset->fetchAll();
foreach ($result as $rows) {
$fields[] = $rows['Field'];
}
return $fields;
} /**
* getPDOError 捕获PDO错误信息
*/
private function getPDOError()
{
if ($this->dbh->errorCode() != '00000') {
$arrayError = $this->dbh->errorInfo();
$this->outputError($arrayError[2]);
}
} /**
* debug
*
* @param mixed $debuginfo
*/
private function debug($debuginfo)
{
var_dump($debuginfo);
exit();
} /**
* 输出错误信息
*
* @param String $strErrMsg
*/
private function outputError($strErrMsg)
{
throw new Exception('MySQL Error: ' . $strErrMsg);
} /**
* destruct 关闭数据库连接
*/
public function destruct()
{
$this->dbh = null;
}
/**
*PDO执行sql语句,返回改变的条数
*如需调试可选用execSql($sql,true)
*/
public function exec($sql = '')
{
return $this->dbh->exec($sql);
}
}

pdo类的使用的更多相关文章

  1. 一个PDO类

    下面是在网上借鉴的一个PDO类: <?php class Database{ private $host = DB_HOST; private $user = DB_USER; private ...

  2. PHP基于单例模式编写PDO类的方法

    一.单例模式简介 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 二.为什么要使用PHP单例模式? 1.php的应用主要在于数据库应用, 所以一个应用中会存在 ...

  3. php-验证码类-PDO类-缩略图类

    Verify.class.php 验证码类 <?php class Verify{ const VERIFY_TYPE_NUM=1; const VERIFY_TYPE_EN=2; const ...

  4. 封装好的PDO类

    封装PDO类,方便使用: <?php header('content-type:text/html;charset=utf-8'); /** * 封装PDODB类 */ // 加载接口 // i ...

  5. PHP PDO类

    <?php //数据库连接类,不建议直接使用DB,而是对DB封装一层 //这个类不会被污染,不会被直接调用 class DB { //pdo对象 private $_pdo = null; // ...

  6. PHP PDO类 单例

    <?php /*//pdo连接信息 $pdo=array("mysql:host=localhost;dbname=demo;charset=utf8","root ...

  7. 学习到目前,自己封装的db类和pdo类

    DB封装类 <?php class DBDA { public $host = "localhost"; public $uid = "root"; pu ...

  8. PDO和PDOStatement类常用方法

    PDO — PDO 类 PDO::beginTransaction — 启动一个事务 PDO::commit — 提交一个事务 PDO::__construct — 创建一个表示数据库连接的 PDO ...

  9. PHP PDO 使用类

    PDO类 <?php class MYPDO { protected static $_instance = null; protected $dbName = ''; protected $d ...

随机推荐

  1. mysql练习(一)

    练习一 创建表,并插入相关数据 CREATE TABLE email ( ID INT NOT NULL PRIMARY KEY, Email VARCHAR() ) INSERT INTO emai ...

  2. 海康SDK编程指南

    转至心澄欲遣 目前使用的海康SDK包括IPC_SDK(硬件设备),Plat_SDK(平台),其中两套SDK都需单独调用海康播放库PlayCtrl.dll来解码视频流,返回视频信息和角度信息.本文仅对视 ...

  3. 在 Visual Studio中 将 Objective-C 编译为 C++

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  4. c# 向驱动打印机发送命令打开钱箱

    引用的dll 链接: https://pan.baidu.com/s/1MjwmfvBCPTBq1QNapKzDmg 提取码: 9wuf [DllImport("Drawcash.dll&q ...

  5. logstash performance testing

    最近一直在和peformance team的同事做logstash 5.6.2的测试,主要测试两个方面:一方面测试log数据是否能全部被logstash获取与发出去,一方面测试logstash自身的c ...

  6. 源码解读·RT-Thread小内存管理算法分析

    这篇文章最初发布在RT-Thread官方论坛中,最近准备整理放到博客中来让更多人一起探讨学习. 2012年9月28日星期五 前言: 母语能力有限 概述: 这篇文字和大家分享一下今晚对RT-Thread ...

  7. Linux系统中sysctl命令详解

    sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下.sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发.IP碎 ...

  8. java获取config下文件

    private static final String keystore="keystore.jks"; InputStream is=Thread.currentThread() ...

  9. Tensorflow教程(1)Tensorflow的下载和安装

    人工智能已经成为了目前的大趋势,作为程序员的我们也应该跟着时代进步.Tensorflow作为人工智能领域的重要工具,被广泛的使用在机器学习的应用当中. Tensorflow使用人数众多.社区完善,所以 ...

  10. 为什么Python 3.6以后字典有序并且效率更高?

    在Python 3.5(含)以前,字典是不能保证顺序的,键值对A先插入字典,键值对B后插入字典,但是当你打印字典的Keys列表时,你会发现B可能在A的前面. 但是从Python 3.6开始,字典是变成 ...