header("Content-type: text/html; charset=utf-8"); 

    /**
* 初始化 pdo 对象实例
* @param bool $newinstance 是否要创建新实例
* @return object->PDO
*/
function pdo($newinstance = false){
global $_W;
if($newinstance) {
$host = 'localhost';
$dbname = 'pro';
$dsn = "mysql:host={$host};dbname={$dbname}";
$username = 'root';
$passwd = 'root';
$charset = 'UTF8';
//连接数据库
$db = new PDO($dsn, $username, $passwd);
$sql = "SET NAMES $charset;";
$db->exec($sql);
return $db;
} else {
if(empty($_W['pdo'])) {
$_W['pdo'] = $GLOBALS['pdo'] = pdo(true);
}
return $_W['pdo'];
}
} /**
* 执行一条非查询语句
*
* @param string $sql
* @param array or string $params
* @return mixed
* 成功返回受影响的行数
* 失败返回FALSE
*/
function pdo_query($sql, $params = array()) {
if (empty($params)) {
$result = pdo()->exec($sql);
return $result;
}
//echo $sql;
$statement = pdo()->prepare($sql);
$result = $statement->execute($params);
if (!$result) {
return false;
} else {
return $statement->rowCount();
}
} /**
* 执行SQL返回第一个字段
*
* @param string $sql
* @param array $params
* @param int $column 返回查询结果的某列,默认为第一列
* @return mixed
*/
function pdo_fetchcolumn($sql, $params = array(), $column = 0) {
$statement = pdo()->prepare($sql);
$result = $statement->execute($params);
if (!$result) {
return false;
} else {
return $statement->fetchColumn($column);
}
} /**
* 执行SQL返回第一行
*
* @param string $sql
* @param array $params
* @return mixed
*/
function pdo_fetch($sql, $params = array()) {
$statement = pdo()->prepare($sql);
$result = $statement->execute($params); if (!$result) {
return false;
} else {
return $statement->fetch(pdo::FETCH_ASSOC);
}
} /**
* 执行SQL返回全部记录
*
* @param string $sql
* @param array $params
* @return mixed
*/
function pdo_fetchall($sql, $params = array(), $keyfield = '') {
$statement = pdo()->prepare($sql);
$result = $statement->execute($params); if (!$result) {
return false;
} else {
if (empty($keyfield)) {
return $statement->fetchAll(pdo::FETCH_ASSOC);
} else {
$temp = $statement->fetchAll(pdo::FETCH_ASSOC);
$rs = array();
if (!empty($temp)) {
foreach ($temp as $key => &$row) {
if (isset($row[$keyfield])) {
$rs[$row[$keyfield]] = $row;
} else {
$rs[] = $row;
}
}
}
return $rs;
}
}
} /**
* 更新记录
*
* @param string $table
* @param array $data
* 要更新的数据数组
* array(
* '字段名' => '值'
* )
* @param array $params
* 更新条件
* array(
* '字段名' => '值'
* )
* @param string $gule
* 可以为AND OR
* @return mixed
*/
function pdo_update($table, $data = array(), $params = array(), $gule = 'AND') {
global $_W;
$fields = pdo_implode($data, ',');
$condition = pdo_implode($params, $gule);
$params = array_merge($fields['params'], $condition['params']);
$sql = "UPDATE $table SET {$fields['fields']}";
$sql .= $condition['fields'] ? ' WHERE '.$condition['fields'] : '';
return pdo_query($sql, $params);
} /**
* 删除记录
*
* @param string $table
* @param array $params
* 更新条件
* array(
* '字段名' => '值'
* )
* @param string $gule
* 可以为AND OR
* @return mixed
*/
function pdo_delete($table, $params = array(), $gule = 'AND') {
global $_W;
$condition = pdo_implode($params, $gule);
$sql = "DELETE FROM $table ";
$sql .= $condition['fields'] ? ' WHERE '.$condition['fields'] : '';
return pdo_query($sql, $condition['params']);
} /**
* 插入数据
*
* @param string $table
* @param array $data
* 要更新的数据数组
* array(
* '字段名' => '值'
* )
* @param boolean $replace
* 是否执行REPLACE INTO
* 默认为FALSE
* @return mixed
*/
function pdo_insert($table, $data = array(), $replace = FALSE) {
global $_W;
$cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
$condition = pdo_implode($data, ',');
//echo "$cmd $table SET {$condition['fields']}";
//var_dump($condition['params']);
return pdo_query("$cmd $table SET {$condition['fields']}", $condition['params']);
} /**
* 返回lastInsertId
*
*/
function pdo_insertid() {
return pdo()->lastInsertId();
} /**
* 转换PDO的字段与参数列表
*
* @param array or string $params
* 可以是数组或字符串
* 是字符串直接返回
* @param string $glue
* 字段间的分隔符
* 可以为逗号(,)或是 AND OR 应对不同的SQL
* @return mixed
* array(
* 'fields' 字段列表或条件
* 'params' 参数列表
* )
*/
function pdo_implode($params, $glue = ',') {
$result = array('fields' => ' 1 ', 'params' => array());
$split = '';
if (!is_array($params)) {
$result['fields'] = $params;
return $result;
}
if (is_array($params)) {
$result['fields'] = '';
foreach ($params as $fields => $value) {
$result['fields'] .= $split . "`$fields` = :$fields";
$split = ' ' . $glue . ' ';
$result['params'][":$fields"] = is_null($value) ? '' : $value;
}
}
return $result;
} //标明回滚起始点
function pdo_begin(){
return pdo()->beginTransaction();
}
//标明回滚结束点,并执行SQL
function pdo_commit(){
return pdo()->commit();
}
//执行回滚
function pdo_back(){
return pdo()->rollBack();
}

PDO封装函数的更多相关文章

  1. Javascript:来一个AJAX封装函数

    前不久换工作了,最近一直在出差,忙得跟狗一样,所以博客都荒废许久了. 最近的工作中涉及到大量的ajax操作,本来该后台做的事也要我来做了.而现在使用的ajax函数是一个后台人员封装的—-但他又是基于 ...

  2. jQuery封装函数

    //1,插件命名:jQuery.插件名.js 为拉避免和其他库的冲突// //2,自定义插件尽量避免使用$ 如果非要使用$就一定要将jQuery传递进去,//写在最后加一个小括号写jquery ;结束 ...

  3. 浏览器兼容——DOM事件封装函数

    //封装函数var eventUtil={    //添加事件    addHandler:function(element,type,handler){        if(element.addE ...

  4. WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法

    原文:WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法 今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都是可以提取出来的,就自己把那些公共部分提出出来,以后如果要获取 某部分的 ...

  5. Ajax封装函数笔记

    Ajax封装函数: function ajax(method, url, data, success) { //打开浏览器 //1.创建一个ajax对象 var xhr = null; try { x ...

  6. JS运动缓冲的封装函数

    之前经常写运动函数,要写好多好多,后来想办法封装起来.(运动缓冲). /* 物体多属性同时运动的函数 obj:运动的物体 oTarget:对象,属性名为运动的样式名,属性值为样式运动的终点值 rati ...

  7. js面向对象学习笔记(二):工厂方式:封装函数

    //工厂方式:封装函数function test(name) { var obj = new Object(); obj.name = name; obj.sayName = function () ...

  8. javascript封装函数入门

    封装函数的入门 一.使用函数有两步: 1.定义函数,又叫声明函数, 封装函数. 定义函数的三个要素:功能,参数,返回值. function 函数名(形参){ 函数代码 return 结果} //2.调 ...

  9. ajax请求封装函数

    写封装函数的套路 1.先写出这个函数原来的基本用法 2.写一个没有形参空函数,将上一步的代码直接作为函数体, 3.根据使用过程中,抽象出来需要变的东西作为形参 function ajax (metho ...

随机推荐

  1. WCF默认实例的解读

    一:图片 IService1.cs是定义的接口,包含对Service.方法和方法用的类的声明的声明 Service1.cs是对接口的实现,包含实现的方法 代码注释: using System; usi ...

  2. 2013=12=2 bitree-----补充

  3. ubunu设置java命令为全局的命令-添加到全局环境变量

    sudo vim /etc/environment 在environment中后边添加代码: JAVA_HOME=/usr/local/jdk1.6.0_31 CLASSPATH=/usr/local ...

  4. UITouch附加

    框架 /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKNode.h 概览 重要提示:这是一个初步的 ...

  5. Android Spinner列表选择框

    Spinner Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源. 1.直接设置数组源 在res/values/strings.xml中设置数组源 ...

  6. Citrix Presentation server can not contact the license server

    If you come across the above error,  you may also come across one or more of the errors below within ...

  7. SpringMVC03controller中定义多个方法

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  8. poj 1964 Cow Cycling(dp)

    /* 一开始想的二维的 只维护第几只牛还有圈数 后来发现每只牛的能量是跟随每个状态的 所以再加一维 f[i][j][k]表示第i只牛 领跑的j全 已经消耗了k体力 转移的话分两类 1.换一只牛领跑 那 ...

  9. canvas在手机qq浏览器显示错乱

    做大转盘的时候,使用html5 canvas 生成转盘,但在手机qq浏览器中显示错乱. 原本想在后台生成大转盘图片,后来想一想既然用图片来实现, 还不如直接由canvas 导出 toDataURL 在 ...

  10. Js实现简单的联动,无数据库版本

    <html> <head> <title></title> <script language="javascript" typ ...