SaeMysql l类
2014-03-09 15:07
615 查看
<?php /** * SAE Mysql服务 * * 支持主从分离 * * @author Easychen <easychen@gmail.com> * @version $Id$ * @package sae * */ /** * Sae Mysql Class * * <code> * <?php * $mysql = new SaeMysql(); * * $sql = "SELECT * FROM `user` LIMIT 10"; * $data = $mysql->getData( $sql ); * $name = strip_tags( $_REQUEST['name'] ); * $age = intval( $_REQUEST['age'] ); * $sql = "INSERT INTO `user` ( `name` , `age` , `regtime` ) VALUES ( '" . $mysql->escape( $name ) . "' , '" . intval( $age ) . "' , NOW() ) "; * $mysql->runSql( $sql ); * if( $mysql->errno() != 0 ) * { * die( "Error:" . $mysql->errmsg() ); * } * * $mysql->closeDb(); * ?> * </code> * * @package sae * @author EasyChen * */ class SaeMysql extends SaeObject { /** * 构造函数 * * @param bool $do_replication 是否支持主从分离,true:支持,false:不支持,默认为true * @return void * @author EasyChen */ function __construct($do_replication = true) { $this->port = 3307; $this->host = '.rdc.sae.sina.com.cn'; $this->accesskey = SAE_ACCESSKEY; $this->secretkey = SAE_SECRETKEY; $this->appname = 'app_'.$_SERVER['HTTP_APPNAME']; //set default charset as utf8 $this->charset = 'UTF8'; $this->do_replication = $do_replication; } /** * 设置keys * * 当需要连接其他APP的数据库时使用 * * @param string $akey AccessKey * @param string $skey SecretKey * @return void * @author EasyChen */ public function setAuth($akey, $skey) { $this->accesskey = $akey; $this->secretkey = $skey; } /** * 设置Mysql服务器端口 * * 当需要连接其他APP的数据库时使用 * * @param string $port * @return void * @author EasyChen */ public function setPort($port) { $this->port = 3307; $this->host = '.rdc.sae.sina.com.cn'; } /** * 设置Appname * * 当需要连接其他APP的数据库时使用 * * @param string $appname * @return void * @author EasyChen */ public function setAppname($appname) { $this->appname = 'app_'.$appname; } /** * 设置当前连接的字符集 , 必须在发起连接之前进行设置 * * @param string $charset 字符集,如GBK,GB2312,UTF8 * @return void */ public function setCharset($charset) { return $this->set_charset($charset); } /** * 同setCharset,向前兼容 * * @param string $charset * @return void * @ignore */ public function set_charset($charset) { $this->charset = $charset; } /** * 运行Sql语句,不返回结果集 * * @param string $sql * @return mysqli_result|bool */ public function runSql($sql) { return $this->run_sql($sql); } /** * 同runSql,向前兼容 * * @param string $sql * @return bool * @author EasyChen * @ignore */ public function run_sql($sql) { $this->last_sql = $sql; $dblink = $this->db_write(); if ($dblink===false) { return false; } $ret = mysqli_query($dblink, $sql); $this->save_error($dblink); return $ret; } /** * 运行Sql,以多维数组方式返回结果集 * * @param string $sql * @return array 成功返回数组,失败时返回false * @author EasyChen */ public function getData($sql) { return $this->get_data($sql); } /** * 同getData,向前兼容 * * @ignore */ public function get_data($sql) { $this->last_sql = $sql; $data = Array(); $i = 0; $dblink = $this->do_replication?$this->db_read():$this->db_write(); if ($dblink===false) { return false; } $result = mysqli_query($dblink, $sql); $this->save_error($dblink); if (is_bool($result)) { return $result; } else { while ($Array = mysqli_fetch_array($result, MYSQL_ASSOC)) { $data[$i++] = $Array; } } mysqli_free_result($result); if (count($data)>0) return $data; else return NULL; } /** * 运行Sql,以数组方式返回结果集第一条记录 * * @param string $sql * @return array 成功返回数组,失败时返回false * @author EasyChen */ public function getLine($sql) { return $this->get_line($sql); } /** * 同getLine,向前兼容 * * @param string $sql * @return array * @author EasyChen * @ignore */ public function get_line($sql) { $data = $this->get_data($sql); if ($data) { return @reset($data); } else { return false; } } /** * 运行Sql,返回结果集第一条记录的第一个字段值 * * @param string $sql * @return mixxed 成功时返回一个值,失败时返回false * @author EasyChen */ public function getVar($sql) { return $this->get_var($sql); } /** * 同getVar,向前兼容 * * @param string $sql * @return array * @author EasyChen * @ignore */ public function get_var($sql) { $data = $this->get_line($sql); if ($data) { return $data[@reset(@array_keys($data))]; } else { return false; } } /** * 同mysqli_affected_rows函数 * * @return int 成功返回行数,失败时返回-1 * @author Elmer Zhang */ public function affectedRows() { $result = mysqli_affected_rows($this->db_write()); return $result; } /** * 同mysqli_last_id函数 * * @return int 成功返回last_id,失败时返回false * @author EasyChen */ public function lastId() { return $this->last_id(); } /** * 同lastId,向前兼容 * * @return int * @author EasyChen * @ignore */ public function last_id() { $result = mysqli_insert_id($this->db_write()); return $result; } /** * 关闭数据库连接 * * @return bool * @author EasyChen */ public function closeDb() { return $this->close_db(); } /** * 同closeDb,向前兼容 * * @return bool * @author EasyChen * @ignore */ public function close_db() { if (isset($this->db_read)) @mysqli_close($this->db_read); if (isset($this->db_write)) @mysqli_close($this->db_write); } /** * 同mysqli_real_escape_string * * @param string $str * @return string * @author EasyChen */ public function escape($str) { if (isset($this->db_read)) { $db = $this->db_read; } elseif (isset($this->db_write)) { $db = $this->db_write; } else { $db = $this->db_read(); } return mysqli_real_escape_string($db, $str); } /** * 返回错误码 * * * @return int * @author EasyChen */ public function errno() { return $this->errno; } /** * 返回错误信息 * * @return string * @author EasyChen */ public function error() { return $this->error; } /** * 返回错误信息,error的别名 * * @return string * @author EasyChen */ public function errmsg() { return $this->error(); } /** * @ignore */ private function connect($is_master = true) { if ($this->port==0) { $this->error = 13048; $this->errno = 'Not Initialized'; return false; } if ($is_master) $host = 'w'.$this->host; else $host = 'r'.$this->host; $db = mysqli_init(); mysqli_options($db, MYSQLI_OPT_CONNECT_TIMEOUT, 5); if (!mysqli_real_connect($db, $host, $this->accesskey, $this->secretkey, $this->appname, $this->port)) { $this->error = mysqli_connect_error(); $this->errno = mysqli_connect_errno(); return false; } mysqli_set_charset($db, $this->charset); return $db; } /** * @ignore */ private function db_read() { if (isset($this->db_read)) { return $this->db_read; } else { if (!$this->do_replication) return $this->db_write(); else { $this->db_read = $this->connect(false); return $this->db_read; } } } /** * @ignore */ private function db_write() { if (isset($this->db_write)) { return $this->db_write; } else { $this->db_write = $this->connect(true); return $this->db_write; } } /** * @ignore */ private function save_error($dblink) { $this->error = mysqli_error($dblink); $this->errno = mysqli_errno($dblink); } private $error; private $errno; private $last_sql; }
相关文章推荐
- [MySQL]load data local infile向MySQL数据库中导入数据时,无法导入和字段不分离问题。
- 使用JDBC在MySQL数据库中快速批量插入数据
- MySQL安装、配置、使用及JDBC链接
- Mybatis3.2.3+mysql第一个例子(入门) | (转)
- Mysql笔记
- mysql 视图
- mysql主从复制的实现(双机)
- 【精华】连接MySQL数据库时常见故障问题的分析与解决
- mysql中timestamp引起的org.hibernate.exception.DataException
- MySQL删除/更新数据时报1175错误
- MySQL修改root密码的各种方法整理
- 《mysql技术内幕》---第一章总结笔记
- mysql navcat进行a与b数据库同步
- 关于mysql,使用脚本导入数据
- MySQL性能分析及explain的使用说明
- 在MySQL数据库建立多对多的数据表关系
- MySQL错误1042-Can't get hostname for your address解决方法
- Mac下安装MySQLdb过程及问题
- 查看表结构 -- MySQL Desc指令相关
- MySQL的information_schema的介绍