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. 在FP与DDD的道路上越走越远

    托辞 最近一口气读了若干本FP方面的书,可人是越来越懒了,要整理个什么东西却也没有那个精力,所以简单扔几张图,算是给自己一个提醒吧. 在此期间,我用并不纯熟的Scala和Groovy练了一把手.虽然只 ...

  2. Python3 字符串操作

    截掉指定字符串 # 截掉指定字符串 string.strip("what you want to delete") #截掉字符串左边的空格 string.lstrip() #截掉字 ...

  3. object references an unsaved transient instance【异常】

    [异常提示] TransientObjectException: object references an unsaved transient instance -save the transient ...

  4. BZOJ1345 Baltic2007 序列问题Sequence 【思维题】*

    BZOJ1345 Baltic2007 序列问题Sequence Description 对于一个给定的序列a1,…,an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用 ...

  5. POJ1733 Parity game 【扩展域并查集】*

    POJ1733 Parity game Description Now and then you play the following game with your friend. Your frie ...

  6. 常用的SQL语句大全

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

  7. Appium定位 5 ——xpath

    今天我们先来和大家说一下appium,上一次说到了定位,不知道大家定位的怎么样了,今天来说如何定位xpath,五分钟即可学会: 例1: 现在我想定位下面这个登录按钮: xpath该怎么写呢? 先不管三 ...

  8. python第三方库

    autopy autopy是一个自动化操作的python库,可以模拟一些鼠标.键盘事件,还能对屏幕进行访问 pywin32 win32api的python封装 PIL python的图形图像处理框架

  9. docker 镜像导入导出[转]

    0)查看镜像id sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/calico/node v1.0.1 c70511a4 ...

  10. 编译openvpn在链接时报tuncfg错误

    1. 链接时产生tuncfg错误 init.o: In function `do_persist_tuntap': init.c:(.text+0x24d8): undefined reference ...