<?php
/**
* @date 2014-07-16 22:50pm
* @author Diven
* @category 数据库操作类
* @version 1.0
* @copyright 吴晓杰@wuxiaojie(702814242@qq.com)
*/
class model{
private $link = ''; //数据库链接
public $config = './config.db.php'; //数据库配置文件路径
public $db = ''; //选择的数据库配置键值
public $dbname = ''; //数据库名
public $prefix = ''; //表前缀
public $name = ''; //表名(不带前缀)
public $tableName = ''; //完整的表名
public $charset = 'utf8'; //字符集
public $pk = ''; //主键
public function __construct()
{
$dbConfig = @include $this->config;
if ($dbConfig === false || !is_array($dbConfig) || !isset($dbConfig[$this->db])) {
$this->__error('2', 'Introduction of database configuration file error');
}
$config = $dbConfig[$this->db];
unset($dbConfig);
$this->link = mysql_connect($config['host'], $config['username'], $config['password']);
if ($this->link) {
$this->dbname = empty($this->dbname) ? $config['dbname'] : $this->dbname;
$this->prefix = isset($config['prefix']) ? $config['prefix'] : '';
$this->tableName = $this->prefix.$this->name;
@mysql_set_charset($this->charset, $this->link);
@mysql_select_db($this->dbname);
}else{
$this->__error('0', 'Database connection error');
}
}
/**
* @abstract 组成tableName
* @param $name 没有前缀的表名
* @return string 完整的表名
*/
public function setTableName($name)
{
return $this->tableName = $this->prefix.$name;
}
/**
* @abstract 数据库错误退出
* @param string $error 错误编码
* @param string $message 错误信息
* @return exit/echo
*/
private function __error($error, $message)
{
exit('{"sqlerror":"'.$error.'","message":"'.$message.'"}');
}
/**
*@abstract 检查部分SQL注入后 执行sql
*@param string 一条完整的sql语句
*@return Object
*/
public function query($sql)
{
$res = mysql_query($sql);
if ($res) {
return $res;
}else{
$this->__error(mysql_errno(), mysql_error());
}
}
/**
*@abstract 执行sql 并返回全部查询结果
*@param string 一条完整的sql语句
*@return Array
*/
public function queryAll($sql)
{
$res = $this->query($sql);
if ($res) {
$all = array();
while ($row = @mysql_fetch_array($res, MYSQL_ASSOC)) {
$all[] = $row;
}
return $all;
}else{
return false;
}
}
/**
*@abstract 执行sql 并返回第一条查询结果
*@param string 一条完整的sql语句
*@return Array
*/
public function queryRow($sql)
{
$res = $this->query($sql);
if ($res) {
return mysql_fetch_array($res, MYSQL_ASSOC);
}else{
return false;
}
}
/**
*@abstract 执行sql 并返回第一个值
*@param string 一条完整的sql语句
*@return Array
*/
public function queryOne($sql)
{
$res = $this->query($sql);
if ($res) {
$row = mysql_fetch_row($res);
return $row[0];
}else{
return false;
}
}
/**
* @abstract 取得前一次操作所影响的记录行数
* @return int
*/
public function affectedRows()
{
return mysql_affected_rows($this->link);
}
/**
* @abstract 取得前一次写操作的id
* @return int
*/
public function insertId()
{
return mysql_insert_id($this->link);
}
/**
*@abstract 向数据库插入一条数据
*@param $data = array('field_1'=>'value_2','field_2'=>'value_2')
*@param string $dataBaseName 数据库名(跨库操作才需要)
*@return int || boolbean
*/
public function insert($data = array(), $dataBaseName = '')
{
$tableName = $dataBaseName ? $dataBaseName.".{$this->tableName}" : $this->tableName;
$keyArr = $valArr = array();
if (!empty($data) && is_array($data)) {
foreach ($data as $key => $val){
$keyArr[] = "`".$key."`";
$valArr[] = "'".$val."'";
}
$keySql = !empty($keyArr) ? " (".implode(',',$keyArr).") " : '';
$valSql = !empty($valArr) ? " (".implode(',',$valArr).") " : '';
$sql = "INSERT INTO {$tableName} {$keySql} VALUES {$valSql} ";
return $this->query($sql) ? $this->insertId() : false;
}
return false;
}
/**
*@abstract 批量插入数据
*@param $data = array(
* 'field_1'=>array('value_1','value_2',...),
* 'field_2'=>array('value_1','value_2',...),...)
*@param string $type INSERT 或者 REPLACE
*@param string $dataBaseName 数据库名(跨库操作才需要)
*@return int || boolbean
*/
public function insertBatch($data = array(), $type = 'INSERT', $dataBaseName = '')
{
if (!in_array(strtoupper($type), array('INSERT','REPLACE'))){
return false;
}
$tableName = $dataBaseName ? $dataBaseName.".{$this->tableName}" : $this->tableName;
if (empty($data) || !is_array($data)) return false;
if (isset($data[$this->pk])) unset($data[$this->pk]);
$keyArr = array_keys($data);
$valArr = array_values($data);
if (empty($keyArr) || empty($valArr)) return false;
foreach ($keyArr as $val){
$insertKey[] = '`'.$val.'`';
}
$insertKeySql = " (".implode(',', $insertKey).") ";
$insertVal = array();
foreach ($valArr as $key => $value){
foreach ($value as $k => $v){
$insertVal[$k][$key] = "'".$v."'";
}
}
$insertArr = array();
foreach ($insertVal as $val){
if (!empty($val) && is_array($val)) {
$insertArr[] = " (".implode(',', $val).") ";
}
}
if (!empty($insertArr) && is_array($insertArr)) {
$sql = "{$type} INTO {$tableName} {$insertKeySql} VALUES ".implode(',', $insertArr);
return $this->query($sql) ? $this->insertId() : false;
}
return false;
}
}