public function setUp() { $this->db_config = $GLOBALS['UNITTEST_DB_CONFIG']; $handle = DBMysqlNamespace::createDBHandle2($this->db_config, "test", $this->encoding); assert($handle); $sql = 'create table if not exists tb_unittest(id int NOT NULL auto_increment,c1 int, PRIMARY KEY (id) )'; $ret = $handle->execute($sql); $this->assertEquals($ret, TRUE); $this->handle = $handle; }
public function test_multiInstance() { $h1 = DBMysqlNamespace::createDBHandle($this->db_config, $this->dbname, $this->encoding); //print_r( $h1 ); $arg = is_bool($h1) && $h1 === FALSE; $this->assertEquals($arg, FALSE); DBMysqlNamespace::releaseDBHandle($h1); }
public function setUp() { $dbLink = DBMysqlNamespace::createDBHandle(DBConfig::$SERVER_BANG_SLAVE, 'bang'); $this->sqlBuilder = new SqlBuilderV5('bang_promotion', array('id' => 'INT', 'bang_id' => 'INT', 'title' => 'VARCHAR', 'description' => 'VARCHAR', 'create_at' => 'INT', 'status' => 'INT', 'refuse_reason' => 'VARCHAR'), $dbLink); }
/** * 关闭DB对象 */ public function close() { return DBMysqlNamespace::releaseDBHandle($this->_handle); }
/** * 批量创建model文件 * @param type $server 服务器配置,例如DBConfig::$SERVER_MS_SLAVE * @param type $database 数据库,例如'beijing' * @param type $tableLike 表范围,例如'pet_post',或者'%_post' * @param type $fileDir 放置model的目录 * @return boolean */ public static function createModels($server, $database, $tableLike, $fileDir = '') { //获取表名称 $dbr = DBMysqlNamespace::createDBHandle($server, $database); $sql = "show tables like '{$tableLike}'"; $tables = DBMysqlNamespace::getAll($dbr, $sql); if (empty($tables)) { return false; } //为每个表创建model foreach ($tables as $tableInfo) { //获取表字段 $tableName = current($tableInfo); $sql = "DESC {$tableName}"; $dbFields = DBMysqlNamespace::getAll($dbr, $sql); //生成代码文件需要的变量 $dateText = date('Y-m-d H:i:s'); $className = self::_getClassName($tableName); //fieldTypes $fieldTypes = self::_getFieldTypes($dbFields); $fieldTypesString = PhpCodeGenerator::genArray($fieldTypes, false, ' '); $fieldTypesString = trim($fieldTypesString); $code = <<<modelCode <?php /** * 使用单例模式的model * @Copyright (c) 2013 Ganji Inc. * @date {$dateText} * (使用code_base2/util/db/script/model_builder.php生成) */ require_once CODE_BASE2 . '/util/db/ModelV5.class.php'; class {$className} extends ModelV5 { /** * 实例 */ private static \$_instance = null; /** * 表名 */ protected \$tableName = '{$tableName}'; /** * 表字段 */ protected \$fieldTypes = {$fieldTypesString}; protected function __construct() { //require_once GANJI_CONF . '/DBConfig.class.php'; //\$this->setHandler(DBConfig::\$SERVER_MS_MASTER, DBConfig::\$SERVER_MS_SLAVE, 'ganji_vehicle'); } public static function getInstance() { if (self::\$_instance instanceof self) { return self::\$_instance; } self::\$_instance = new self(); return self::\$_instance; } } modelCode; $filePath = self::_getFilePath($fileDir, $className); file_put_contents($filePath, $code); echo "{$filePath} 生成成功!\n"; } return true; }
/** * 根据where条件获取记录 * @param string|array $where where条件 * string e.g. string 'id=3 and create_at<2222222 or type in (2,3)' * array e.g. array('id' => 3, 'type' => 2) * @param string $fields 选择的字段 'id,type,create_at' * @param string $orderBy 排序条件 e.g. 'id desc' * @return type */ public function getRow($where, $selectField = '*', $orderBy = '') { if (empty($where) || empty($selectField)) { return array(); } if (strstr($selectField, 'count') || strstr($selectField, 'sum')) { $sql = $this->sqlBuilder->createSelectSql($selectField, $where); } else { $sql = $this->sqlBuilder->createSelectSql($selectField, $where, $orderBy, 1); } self::addSqlHistory($sql); return DBMysqlNamespace::getRow($this->getSlaveDb(), $sql); }
/** * @brief 设置 handle ping的属性 * @param $value * @return void * @example * 如果是crontabe 建议在开始是增加 * DBMysqlNamespace::setHandlePing(DBConstNamespace::HANDLE_PING); 句柄失效可以重连 * DBMysqlNamespace::setHandlePing(DBConstNamespace::NOT_HANDLE_PING); 句柄失效不能重连 * 如果关闭可以设置 false, 默认是不开启的 * DBMysqlNamespace::setHandlePing(); */ public static function setHandlePing($value = false) { self::$_HANDLE_PING = $value; }
/** * 运行SQL * @param string $sql * @return mixed */ private function _runSQL($sql) { return DBMysqlNamespace::execute($this->_handle, $sql); }
/** * sql直接查询,暂时只支持读操作,需要写操作的时候再扩展 * @param $sql */ public function query($sql) { if (empty($sql)) { return false; } return DBMysqlNamespace::query($this->getSlaveDb(), $sql); }