使用方法

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. Windows 10 UWP 部署

      原文  http://youthlin.com/20151105.html 我们知道VS连接手机可以直接部署到手机里,但平板貌似无法这样干,平板与电脑连接没有丝毫反应……那么想看VS里写的uwp应 ...

  2. .NET Core整合log4net以及全局异常捕获实现2

    Startup代码 public static ILoggerRepository repository { get; set; } public Startup(IConfiguration con ...

  3. The Portable Executable File Format from Top to Bottom(每个结构体都非常清楚)

    The Portable Executable File Format from Top to Bottom Randy KathMicrosoft Developer Network Technol ...

  4. acl_cpp 的编译与使用

    注:因为现在 acl_cpp 已经合并进 acl 项目中,本文仅是介绍了老版本的 acl_cpp 的编译过程,新版本的介绍及编译请参考:acl 框架库简介. acl_cpp 是基于 acl 为基础开发 ...

  5. Delphi中inherited问题

    inherited Create(AOwner); 和直接写inherited有区别吗 有区别,inherited Create是指定调用父类的Create方法,当然你也可以inherited Des ...

  6. Realm_King 之 .NET 打包详细教程(A)

    最近一直在winform程序开发,听说身边的人不是很了解打包,给大家提供一点简单的打包,相信能看懂的... (一)右键解决方案: 在弹出"添加新项目"窗体中找到  其他项目类型=& ...

  7. <iOS小技巧> 返回上级目录操作Goback()方法

    Goback()方法功能:返回上一级界面,通过判断 popViewControllerAnimated 类型是否为空,来判断是present还是pop出来,然后直接做了releaseSelf操作: - ...

  8. 极简代理IP爬取代码——Python爬取免费代理IP

    这两日又捡起了许久不碰的爬虫知识,原因是亲友在朋友圈拉人投票,点进去一看发现不用登陆或注册,觉得并不复杂,就一时技痒搞一搞,看看自己的知识都忘到啥样了. 分析一看,其实就是个post请求,需要的信息都 ...

  9. python分布式编程(转)

    本文代码转载廖雪峰老师的python3教程 分布式编程的难点在于: 1.服务器之间的通信,主节点如何了解从节点的执行进度,并在从节点之间进行负载均衡和任务调度: 2.如何让多个服务器上的进程访问同一资 ...

  10. C#中await/async闲说

    自从C#5.0增加异步编程之后,异步编程越来越简单,async和await用的地方越来越多,越来越好用,只要用异步的地方都是一连串的异步,如果想要异步编程的时候,需要从底层开始编写,这样后边使用的时候 ...