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. HDU3555 Bomb 数位DP第一题

    The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the ti ...

  2. THREE.OrbitControls初始化设置位移/旋转/滚轮

    let oldController;//已知的一个controller //初始化旋转(鼠标左键的操作) let position=oldController.object.position; cam ...

  3. asp.net core microservices 架构之 分布式自动计算(一)

       一:简介   自动计算都是常驻内存的,没有人机交互.我们经常用到的就是console job和sql job了.sqljob有自己的宿主,与数据库产品有很关联,暂时不提.console job使 ...

  4. xpath与css_selector定位详解

    例题:分别用xPath和css_selector定位下图的img标签 答案:  xpath:.//*[@id='fstscr']/div[3]/div[2]/a/img css_selector: . ...

  5. CentOS编译安装php7.2

    介绍: 久闻php7的速度以及性能那可是比php5系列的任何一版本都要快,具体性能有多好,建议还是先尝试下再说.如果你是升级或新安装,那你首先需要考虑php7和程序是否存在兼容性,如果程序是基于php ...

  6. LeetCode Find Permutation

    原题链接在这里:https://leetcode.com/problems/find-permutation/description/ 题目: By now, you are given a secr ...

  7. 顺丰品牌研究http://www.kiees.cn/sf/express/brand.htm

    顺丰控股股份有限公司,顺丰速运SF,始于1993年,国内速递行业中民族品牌的佼佼者,以其速度快/安全性能高蜚声业界,现已开通海外快递服务,2017年2月完成借壳上市 1993年,顺丰诞生于广东顺德.自 ...

  8. uwsgi配置理解

    最近使用uwsgi 部署了flask应用,出现了不少问题,仔细查阅了一下资料以及翻看了官方文档,就对自己了解到的做个总结~~ 一.http/http-socket/socketuwsgi开头当然少不了 ...

  9. toxiproxy 安装试用

    备注:    实际上是一个代理工具,但是又不是简单的进行代理(tcp,可以配置策略,toxics 实现延迟,模拟故障,    对于这个大家可能了解的就是netflix 公司的chaos monkey, ...

  10. UVA12716 GCD XOR 数论数学构造

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010682557/article/details/36204645 题目给你一个N,让你求 两个数 ...