config1.inc.php

$CONFIG_DATABASE_TXL = array(
#array('127.0.0.1', 'root', '', 'he_txl','3306')
array('127.0.0.1', 'aspire_txl', 'd90wBE[wc', 'he_txl', '3306')
);

DB.class.php

<?php
/**
* 数据库操作 (PDO)
*
*/ class DB { private static $mConnection = array ();
private static $mInstance = array (); private $_lastConnect = null;
private $_connection = array ();
private $_config = array (); /**
* see @BuildCondition
*/
private static $_params = array (); /**
* 获取唯一实例
*
* @param array config db config param
* @return instance of object
*/
static function Instance($config = array()) {
$key = serialize ( $config ); if (! isset ( self::$mInstance [$key] ) or empty ( self::$mInstance [$key] ) or empty ( self::$mConnection ))
self::$mInstance [$key] = new DB ( $config ); return self::$mInstance [$key];
} /**
* 构造方法
*/
private function __construct($config = array()) {
$this->_config = $config;
$this->Connect ();
} function Connect() {
if (! empty ( $this->_connection ))
return; $option = array (PDO::ATTR_EMULATE_PREPARES => true, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'" ); $config = $this->_config;
foreach ( $config as $i => $database ) {
$dsn = isset ( $database [4] ) ? "mysql:dbname={$database[3]};host={$database[0]};port={$database[4]}" : "mysql:dbname={$database[3]};host={$database[0]}";
try {
$this->_connection [$i] = new PDO ( $dsn, $database [1], $database [2], $option );
} catch ( Exception $e ) {
throw new Exception ( 'Connect ' . $dsn . ' failed: ' . $e->getMessage () );
}
}
} /**
* 析构方法
*/
function __destruct() {
$this->Close ();
} /**
* 关闭
*/
function Close() {
$this->_connection = array ();
} /**
* 获取最后插入ID
*/
function GetInsertId() {
$i = isset ( $this->_lastConnect ) ? $this->_lastConnect : 0;
return is_object ( $this->_connection [$i] ) ? ( int ) $this->_connection [$i]->lastInsertId () : false;
} /**
* get db connection
*
* @param bool $isSelect 指定db
* @return object
*/
private function _getConn($isSelect = false) {
$i = rand ( 0, count ( $this->_config ) - 1 );
$this->_lastConnect = ($isSelect && $i) ? $i : 0;
if (! is_object ( $this->_connection [$this->_lastConnect] ))
$this->Connect ();
$conn = $this->_connection [$this->_lastConnect];
return $conn;
} /**
* 组建QueryCondition
*
* @param mix $condition;
* @param string $logic, optional
* @return string $condition
*/
static function BuildCondition($condition = array(), $logic = 'AND') {
if (is_string ( $condition ) || is_null ( $condition ))
return $condition; $logic = strtoupper ( $logic );
$content = null;
foreach ( $condition as $k => $v ) {
$v_str = ' ? ';
$v_connect = '='; if (is_numeric ( $k )) {
$content .= ' ' . $logic . ' (' . self::BuildCondition ( $v ) . ')';
continue;
} $maybe_logic = strtoupper ( $k );
if (in_array ( $maybe_logic, array ('AND', 'OR' ) )) {
$content .= $logic . ' (' . self::BuildCondition ( $v, $maybe_logic ) . ')';
continue;
} if (is_numeric ( $v )) {
self::$_params [] = $v;
} else if (is_null ( $v )) {
$v_connect = ' IS ';
$v_str = 'NULL';
} else if (is_array ( $v ) && ($c = count ( $v ))) {
if (1 < $c) {
self::$_params = array_merge ( self::$_params, $v );
$v_connect = 'IN(' . join ( ',', array_fill ( 0, $c, '?' ) ) . ')';
$v_str = '';
} else if (empty ( $v )) {
$v_str = $k;
$v_connect = '<>';
} else {
$tmp_keys = array_keys ( $v );
$v_connect = array_shift ( $tmp_keys );
if (is_numeric ( $v_connect ))
$v_connect = '=';
$tmp_values = array_values ( $v );
$v_s = array_shift ( $tmp_values ); if (is_array ( $v_s )) {
$v_str = 'IN (' . join ( ',', array_fill ( 0, count ( $v_s ), '?' ) ) . ')';
self::$_params = array_merge ( self::$_params, $v_s );
} else {
self::$_params [] = $v_s;
} }
} else {
self::$_params [] = $v;
} $content .= " $logic `$k` $v_connect $v_str "; } $content = preg_replace ( '/^\s*' . $logic . '\s*/', '', $content );
$content = preg_replace ( '/\s*' . $logic . '\s*$/', '', $content );
$content = trim ( $content ); return $content;
} /**
* 根据条件获取一条记录
* @param string $table 表名
* @param mix $condition 条件
* @param array $option 查询选项
* @return record
*/
public function GetTableRow($table, $condition, $options = array()) {
return $this->LimitQuery ( $table, array ('condition' => $condition, 'one' => isset ( $options ['one'] ) ? $options ['one'] : true, 'select' => isset ( $options ['select'] ) ? $options ['select'] : '*' ) );
} /**
* 根据条件获取有限条数记录
* @param string $table 表名
* @param array $options 查询选项
$options 可以包含 cache 选单,表示记录cache时间
* @return array of record
*/
function LimitQuery($table, $options = array()) {
return $this->DBLimitQuery ( $table, $options );
} /**
* 根据条件获取有限条数记录,从库中查询,并进行缓存
*
* @param string $table 表名
* @param array $option 查询选项
* @return array of record
*/
function DBLimitQuery($table, $options = array()) {
$condition = isset ( $options ['condition'] ) ? $options ['condition'] : null;
$one = isset ( $options ['one'] ) ? $options ['one'] : false;
$offset = isset ( $options ['offset'] ) ? abs ( intval ( $options ['offset'] ) ) : 0; if ($one)
$size = 1;
else
$size = isset ( $options ['size'] ) ? abs ( intval ( $options ['size'] ) ) : null; $order = isset ( $options ['order'] ) ? $options ['order'] : null;
$select = isset ( $options ['select'] ) ? $options ['select'] : '*'; $condition = self::BuildCondition ( $condition );
$condition = (null == $condition) ? null : "WHERE $condition"; if ($one)
$limitation = " LIMIT 1 ";
else
$limitation = $size ? "LIMIT $offset,$size" : null; $sql = "SELECT $select FROM `$table` $condition $order $limitation";
return $this->GetQueryResult ( $sql, $one, self::$_params );
} /**
* 执行真正的数据库查询
* @param string $sql
* @param bool $one 是否单条记录
* @return array of $record
*/
function GetQueryResult($sql, $one = true, array $params = array()) {
$ret = array ();
$stmt = $this->Execute ( $sql, $params );
if (! is_object ( $stmt )) {
error_log ( 'Error: bad sql - ' . $sql );
error_log ( 'Error: bad sql - ' . var_export ( $params, true ) );
return array ();
} else {
return $one ? $stmt->fetch () : $stmt->fetchAll ();
}
} /**
* 插入一条记录 Alias of method: Insert
* @param string $table 表名
* @param array $condition 记录
* @return int $id
*/
function SaveTableRow($table, $condition) {
return $this->Insert ( $table, $condition );
} /**
* 插入一条记录
* @param string $table 表名
* @param array $condition 记录
* @return int $id
*/
function Insert($table, $condition, $type = 0) {
//print_r($condition);
$content = null;
$sql = "INSERT INTO `$table`
(`" . join ( '`,`', array_keys ( $condition ) ) . '`)
values (' . join ( ',', array_fill ( 0, count ( $condition ), '?' ) ) . ')'; $stmt = $this->Execute ( $sql, array_values ( $condition ) );
// Log::ImageErrorLog($sql);
if (1 == $type) { //用于不是自增id时的判断
return is_object ( $stmt );
}
$insertId = $this->GetInsertId ();
return $insertId;
} /**
* 删除一条记录 Alias of method: Delete
* @param string $table 表名
* @param array $condition 条件
* @return int $id
*/
function DelTableRow($table = null, $condition = array()) {
return $this->Delete ( $table, $condition );
} /**
* 删除一条记录
* @param string $table 表名
* @param array $condition 条件
* @return int $id
*/
function Delete($table = null, $condition = array()) {
if (null == $table || empty ( $condition ))
return false; $condition = self::BuildCondition ( $condition );
$condition = (null == $condition) ? null : "WHERE $condition";
$sql = "DELETE FROM `$table` $condition";
$flag = $this->Execute ( $sql, self::$_params );
return $flag;
} function Execute($sql, array $params = array(), $retry = 0) {
$conn = $this->_getConn ();
$sth = $conn->prepare ( $sql );
if (! is_object ( $sth ))
throw new Exception ( 'Error: bad sql' );
$sth->setFetchMode ( PDO::FETCH_ASSOC ); $result = empty ( $params ) ? $sth->execute () : $sth->execute ( array_values ( $params ) ); //pdo error info
//$arr = $sth->errorInfo();
//print_r($arr); if (($sth->errorCode () == 2006) and ! $retry) {
$this->Close ();
$this->Execute ( $sql, $params, $retry = 1 );
} self::$_params = array ();
if (false == $result) {
$this->Close ();
return false;
} return $sth;
} /**
* 更新一条记录
* @param string $table 表名
* @param mix $id 更新条件
* @param mix $updaterow 修改内容
* @param string $pkname 主键
* @return boolean
*/
function Update($table = null, $id = 1, $updaterow = array(), $pkname = 'id') {
if (null == $table || empty ( $updaterow ) || null == $id)
return false; if (is_array ( $id ))
$condition = self::BuildCondition ( $id );
else
$condition = "`$pkname`='$id'"; $sql = "UPDATE `$table` SET ";
$content = null;
$updates = array ();
$v_str = '?'; foreach ( $updaterow as $k => $v ) {
if (is_array ( $v )) {
$str = $v [0]; //for 'count'=>array('count+1');
$content .= "`$k`=$str,";
} else {
$updates [] = $v;
$content .= "`$k`=$v_str,";
}
} $content = trim ( $content, ',' );
$sql .= $content;
$sql .= " WHERE $condition";
$result = $this->Execute ( $sql, array_merge ( $updates, self::$_params ) ); return is_object ( $result ) ? $result->rowCount () : false;
} /**
* 是否存在符合条件的记录
* @param string $table 表名
* @param array $condition
* @param boolean $returnid 是否返回记录id
* @return mixed (int)id /(array)record
*/
function Exist($table, $condition = array(), $returnid = true, $order = '') {
$row = $this->LimitQuery ( $table, array ('condition' => $condition, 'one' => true, 'order' => $order ) ); if ($returnid)
return empty ( $row ) ? false : (isset ( $row ['id'] ) ? $row ['id'] : true);
else
return empty ( $row ) ? array () : $row;
} static function CheckInt(&$id, $is_abs = false) {
if (is_array ( $id )) {
foreach ( $id as $k => $o )
$id [$k] = self::CheckInt ( $o );
return $id;
} if (! is_int ( $id ))
$id = intval ( $id ); if (0 > $id && $is_abs)
return abs ( $id );
else
return $id;
} /**
* 检查是否DB用于的Array
* @param mix $arr
* @return int $arr
*/
static function CheckArray(&$arr) {
if (! is_array ( $arr )) {
if (false === $arr)
$arr = array ();
else
settype ( $arr, 'array' );
}
return $arr;
} public function Query($sql, $isSelect = false) {
$result = $this->_getConn ( $isSelect )->query ( $sql );
if ($result)
return $result; self::Close ();
return false;
}
}

getActivity.php

<?php

/**
* 多方电话h5 - 获取运营活动列表接口
*/
$action = '多方电话h5_获取运营活动列表';
include_once '../api_driver.php';
include_once 'config.php'; $st = Login::getLoginCookie('mobile');
if ($st) {
$ret = CenAuth::validate($st);
if (isset($ret['error_code']) && $ret['error_code'] == 0) {
$mobile = $ret['data']['mobile'];
} else {
$mobile = '';
}
} else {
$mobile = '';
} $db = DB::Instance($CONFIG_DATABASE_TXL);
$adv_list = $db->GetQueryResult('SELECT `title`, `url`, `image` FROM `h5dfdh` where 1=1', FALSE); foreach ($adv_list as $k => &$value) {
if ($_SERVER['HTTPS']) {
$value['image'] = IMGURL_HTTPS . $value['image'];
} else {
$value['image'] = IMGURL . $value['image'];
}
} $data = $adv_list;
json_result(0, $data, 'ok');
/*
if ($mobile) {
$data = array(array('title'=>'H5版多方通话', 'url'=>'https://txl.cytxl.com.cn/html5/multi-party-call/static/img/img-intro-advertise.f102fb3.png', 'image'=>'https://txl.cytxl.com.cn/html5/multi-party-call/static/img/img-intro-advertise.f102fb3.png'));
json_result(0, $data, 'ok');
} else {
json_result(-1, array(), '请先登录!');
}
*/

PHP mysql client封装的更多相关文章

  1. How to Allow MySQL Client to Connect to Remote MySql

    How to Allow MySQL Client to Connect to Remote MySQ By default, MySQL does not allow remote clients ...

  2. 编译pure-ftpd时提示错误Your MySQL client libraries aren't properly installed

    如果出现类似configure: error: Your MySQL client libraries aren’t properly installed 的错误,请将mysql目录下的 includ ...

  3. configure: error: Cannot find libmysqlclient under /usr Note that the MySQL client library is not bundled anymore! 报错解决

    错误说明 今天在centos 6.3 64位版本上安装PHP5.4.3时在./configure 步骤的时候出现了下面错误configure: error: Cannot find libmysqlc ...

  4. php编译错误Note that the MySQL client library is not bundled anymore或者cannot find mysql header file

    rpm -ivh MySQL-devel-community-5.1.57-1.sles10.x86_64.rpm export PATH=/usr/local/services/libxml2-2. ...

  5. Linux Mysql Client 查询中文乱码

    1.mysql client 端设置编码为utf8 set character_set_results=utf8; 2.连接linux的客户端的编码也要设置为utf8(比如xshell,putty等)

  6. php编译错误Note that the MySQL client library is not bundled anymore!

    Note that the MySQL client library is not bundled anymore! 解决方法. 1. 查看系统有没有安装mysql header find / -na ...

  7. C#工具类OracleHelper,基于Oracle.ManagedDataAccess.Client封装

    基于Oracle.ManagedDataAccess.Client封装的Oracle工具类OracleHelper,代码如下: using System; using System.Data; usi ...

  8. Reactive MySQL Client

    Reactive MySQL Client是MySQL的客户端,具有直观的API,侧重于可伸缩性和低开销. 特征 事件驱动 轻量级 内置连接池 准备好的查询缓存 游标支持 行流 RxJava 1和Rx ...

  9. egg 连接 mysql 的 docker 容器,报错:Client does not support authentication protocol requested by server; consider upgrading MySQL client

    egg 连接 mysql 的 docker 容器,报错:Client does not support authentication protocol requested by server; con ...

随机推荐

  1. ICE:slice语言常识整理

    ICE:Slice语言(二)--源文件和词法规则:    文件命名    Slice的源文件以.ice为扩展名.   对于大小写不区分的系统(例如DOS),文件的扩展名可以大写,也可以小写,例如Cli ...

  2. linux下环境变量PATH设置错误的补救

    本文转自: http://blog.clzg.cn/blog-614449-740527.html    之前不小心在/etc/profile中添加了错误的PATH变量,导致几乎所有的系统命令无法使用 ...

  3. Android学习问题记录之open failed EACCES (Permission denied)

    1.问题描述 Android调用相机拍照保存,然后读取保存好的照片,在读取照片时出现异常(该异常是因为没有SD卡的读取权限所致): 11-08 11:07:46.421 8539-8539/com.c ...

  4. sync or async connect redis in golang

    Head of head 在golang的整个生态里,redis client lib全部都使用多连接或者连接池.这是让人难以理解的,所以我和xiaofei一起写了一个同时支持同步和异步的redis ...

  5. ZOJ3551Bloodsucker (数学期望)

    In 0th day, there are n-1 people and 1 bloodsucker. Every day, two and only two of them meet. Nothin ...

  6. 关于matlab中定点数overflow的处理办法

    定点数overflow的处理有两种办法:1,saturate,也就是说如果超过定点的最大值就取最大值,例如最大值是6结果是8,那么就取6:2,wrap,就是循环,如下图所示

  7. 自定义vue全局组件use使用(解释vue.use()的原理)

    我们在前面学习到是用别人的组件:Vue.use(VueRouter).Vue.use(Mint)等等.其实使用的这些都是全剧组件,这里我们就来讲解一下怎么样定义一个全局组件,并解释vue.use()的 ...

  8. php基础语法(控制语句、数组、函数)

    流程控制 if -else if -else语句: switch语句: while循环: do while循环 for循环: 控制脚本执行进度 die(“输出内容”) exit是die的同义词. sl ...

  9. bzoj 3158 千钧一发——网络流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3158 发现偶数之间一定满足第二个条件:奇数之间一定满足第一个条件 ( \( (2m+1)^{ ...

  10. Java 设计模式之单例模式(一)

    原文地址:Java 设计模式之单例模式(一) 博客地址:http://www.extlight.com 一.背景 没有太多原由,纯粹是记录和总结自己从业以来经历和学习的点点滴滴. 本篇内容为 Java ...