MysqliModel.class.php find("stu","id"));//var_dump($m-ins("stu", "name", "zhu"));//var_dump($m - upd("stu","name","dujianing","id","1"));//var_dump($m - del("stu","name","li"));class MysqliModel { protected $link; protected $dbHost = ''; //主
find("stu","id")); //var_dump($m->ins("stu", "name", "zhu")); //var_dump($m -> upd("stu","name","dujianing","id","1")); //var_dump($m -> del("stu","name","li")); class MysqliModel { protected $link; protected $dbHost = ''; //主机名 protected $dbUser = ''; //数据库用户名 protected $dbPwd = ''; //数据库密码 protected $dbName = ''; //数据库名 public $tableName = ''; //表名 protected $fields = array(); //表的字段名 protected $priKey; //表的主键名(唯一字段) protected $where = ''; //where条件组成的字段where(' id>1 and …') protected $group = ''; //group by 条件组成的字段 protected $having = ''; //having 条件组成的字段 protected $order = ''; //order 条件组成的字段 //构造函数,初始化数据库连接 public function __construct($tableName,$table_pre=null) { $this->dbHost = $GLOBALS["config"]["DB_HOST"] . ':' . $GLOBALS["config"]["DB_PORT"]; $this->dbUser = $GLOBALS["config"]["DB_USER"]; $this->dbPwd = $GLOBALS["config"]["DB_PWD"]; $this->dbName = $GLOBALS["config"]["DB_NAME"]; if(null!=$table_pre && strlen($table_pre)>0) { $tempTableName = $table_pre. $tableName; } else { $tempTableName = $GLOBALS["config"]["DB_PREFIX"] . $tableName; } $this->tableName = $tempTableName; $this->link = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPwd, $this->dbName) or die("数据库连接失败"); mysqli_set_charset($this->link, "utf8"); if(null!=$tableName) { $this->getFields(); //获取表的所有字段 } } /* * 查询指定字段 * $vaue返回指定值 */ public function getField($sql) { $this->log($sql); $res = mysqli_query($this->link, $sql); $arr = mysqli_fetch_array($res,MYSQLI_ASSOC); return $arr; } public function getFieldAll($sql) { $this->log($sql); $re=array(); $res = mysqli_query($this->link, $sql); if(null!=$res){ while($k=mysqli_fetch_array($res,MYSQLI_ASSOC)) { $re[]=$k; } } return $re; } public function query($sql) { $this->log($sql); $res = mysqli_query($this->link, $sql); return $res; } //查找 1.表名 2.条件 3.值 如果不添加条件或者值,就全部查询 public function find($table = "", $key = "", $value = "") { $sql_fields=array (); foreach ($this->fields as $v) { $temp_v=$this->str_prefix($v,1,'`'); $sql_fields[]=$this->str_suffix($temp_v,1,'`'); } $fields = implode(',', $sql_fields); //组装$this->fields成这样id,name,sex,age,email //$fields = implode(',', $this->fields); if (!$key || !$value) { $sql = "select {$fields} from {$table}"; } else { $sql = "select {$fields} from {$table} where {$key} = '{$value}'"; } $res = mysqli_query($this->link, $sql); $arr = mysqli_fetch_all($res, MYSQLI_ASSOC); mysqli_free_result($res); return $arr; } /** * 通过主键查找一条记录 * @param $pk int 主键 如$id * @return 成功返回查询记录 是一维数组$record 失败返回false */ public function findByKey($pk) { $sql_fields=array (); foreach ($this->fields as $v) { $temp_v=$this->str_prefix($v,1,'`'); $sql_fields[]=$this->str_suffix($temp_v,1,'`'); } $fields = implode(',', $sql_fields); //组装$this->fields成这样id,name,sex,age,email //$fields = implode(',', $this->fields); $sql = "select {$fields} from {$this->tableName} where {$this->priKey}= " . intval($pk); $result = mysqli_query($this->link,$sql); if ($result && mysqli_affected_rows($this->link) == 1) { return $record = mysqli_fetch_assoc($result); } else { return null; } } //增加 1.表名 2.需要插入的字段 3.值1 //public function ins($table = "", $zd = "name,score", $value = "") //{ // $arr = explode(",", $value); // $str = ""; // foreach ($arr as $k => $v) // { // $str .= "'" . $v . "'" . ","; // } // $str = rtrim($str, ","); // $sql = "insert into {$table}({$zd})values({$str})"; // // $res = mysqli_query($this->link, $sql); // return mysqli_insert_id($this->link); //} /** * 增加一条记录 * @param $data array 提交的form表单中的数组 * @return 成功返回id 失败返回false */ public function insert($data = array()) { $keys = ""; $values = ""; foreach ($data as $k => $v) { if (in_array($k, $this->fields)) { $keys .= $k . ','; if (get_magic_quotes_gpc()) { $v = stripcslashes($v); } $v = mysqli_real_escape_string($this->link, $v); //防SQL注入,做一个安全转义 $values .= "'{$v}'" . ","; } } $keys = rtrim($keys, ','); $values = rtrim($values, ','); $sql = "insert into {$this->tableName} ($keys) values($values)"; $this->log($sql); $bool = mysqli_query($this->link, $sql); if ($bool) { return mysqli_insert_id($this->link); } else { return 0; } } private function log($content) { $path = $_SERVER['DOCUMENT_ROOT']."/log/"; if (!is_dir($path)){ mkdir($path,0777); // 创建文件夹test,并给777的权限(所有权限) } $content .="\r\n"; // 写入的内容 $file = $path."mysqli_log.txt"; // 写入的文件 file_put_contents($file,$content,FILE_APPEND); // 最简单的快速的以追加的方式写入写入 } /** * 获取当前操作表的所有字段 */ public function getFields() { $sql = "desc {$this->tableName}"; $result = mysqli_query($this->link, $sql); while ($row = mysqli_fetch_assoc($result)) { $fields[] = $row['Field']; //所有字段 if ($row['Key'] == 'PRI') { $this->priKey = $row['Field']; //确定表的主键 } } $this->fields = $fields; } /** * 查询记录列表 * @param * @return 成功返回查询记录 是二维数组$records 失败返回false */ public function select() { $sql_fields=array (); foreach ($this->fields as $v) { $temp_v=$this->str_prefix($v,1,'`'); $sql_fields[]=$this->str_suffix($temp_v,1,'`'); } $fields = implode(',', $sql_fields); //组装$this->fields成这样id,name,sex,age,email //$fields = implode(',', $this->fields); //组装$this->fields成这样id,name,sex,age,email $sql = "select {$fields} from {$this->tableName} {$this->where} {$this->group} {$this->having} {$this->order} "; $this->log($sql); $result = mysqli_query($this->link, $sql); if ($result && mysqli_affected_rows($this->link) > 0) { while ($row = mysqli_fetch_assoc($result)) { $records[] = $row; } $this->total = mysqli_affected_rows($this->link); return $records; } else { return false; } } /** * 前加 * @param $str * @param int $n * @param string $char * @return string */ private function str_prefix($str, $n=1, $char=" "){ for ($x=0;$x<$n;$x++){$str = $char.$str;} return $str; } /** * 后加 * @param $str * @param int $n * @param string $char * @return string */ private function str_suffix($str, $n=1, $char=" "){ for ($x=0;$x<$n;$x++){$str = $str.$char;} return $str; } public function selectOne() { $sql_fields=array (); foreach ($this->fields as $v) { $temp_v=$this->str_prefix($v,1,'`'); $sql_fields[]=$this->str_suffix($temp_v,1,'`'); } $fields = implode(',', $sql_fields); //组装$this->fields成这样id,name,sex,age,email $sql = "select {$fields} from {$this->tableName} {$this->where} {$this->group} {$this->having} {$this->order} "; $this->log($sql); $result = mysqli_query($this->link, $sql); if ($result && mysqli_affected_rows($this->link) > 0) { $row = mysqli_fetch_assoc($result); $records = $row; //$this->total = mysql_affected_rows($this->link); return $records; } else { return false; } } /** * 删除一条记录 * @param $id int 记录的id * @return 成功返回id 失败返回false */ public function delete($id) { if($id>0) { $sql = "delete from {$this->tableName} where {$this->priKey}=" . intval($id); $this->log($sql); $bool = mysqli_query($this->link, $sql); if ($bool) { return $id; } else { return false; } } } /** * 删除一条记录 * @param $id int 记录的id * @return 成功返回id 失败返回false */ public function deleteBy($condition,$val) { if($val) { $sql = "delete from {$this->tableName} where $condition = $val"; $this->log($sql); $bool = mysqli_query($this->link, $sql); if ($bool) { return $bool; } else { return false; } } } //析构函数 public function __destruct() { if (isset($res)) { mysqli_free_result($res); } mysqli_close($this->link); } /** * 更新一条记录 * @param $data array 提交的form表单中的数组 * @param $id int 修改记录的id * @return 成功返回id 失败返回false */ public function update($data = array(), $id) { $set_sql = ""; //循环过滤属性把数组组装成 name='张三',age='183',email='aaa@bb.com' foreach ($data as $k => $v) { if (in_array($k, $this->fields)) { if (get_magic_quotes_gpc()) { $v = stripcslashes($v); } $v = mysqli_real_escape_string($this->link, $v); //防SQL注入,做一个安全转义 $set_sql .= "{$k}='$v',"; } } $set_sql = rtrim($set_sql, ','); $sql = "update {$this->tableName} set {$set_sql} where {$this->priKey}=" . intval($id); $this->log($sql); $bool = mysqli_query($this->link, $sql); if ($bool && mysqli_affected_rows($this->link) == 1) { return $id; } else { return false; } } /** * 更新一条记录 * @param $data array 提交的form表单中的数组 * @param $id int 修改记录的id * @return 成功返回id 失败返回false */ public function updateBy($data = array(), $condition,$id) { $set_sql = ""; foreach ($data as $k => $v) { if (in_array($k, $this->fields)) { if (get_magic_quotes_gpc()) { $v = stripcslashes($v); } $v = mysqli_real_escape_string($this->link, $v); //防SQL注入,做一个安全转义 $set_sql .= "{$k}='$v',"; } } $set_sql = rtrim($set_sql, ','); $sql = "update {$this->tableName} set {$set_sql} where {$condition}='{$id}'" ; $this->log($sql); $bool = mysqli_query($this->link, $sql); if ($bool && mysqli_affected_rows($this->link) == 1) { return $id; } else { return false; } } /** * 统计总行数 * @return 成功返回id 失败返回false */ public function count() { return $this->total; } /** * where() 函数 * @param $where 条件 * @return 返回该对象 */ public function where($where = '') { if (is_string($where) && !empty($where)) { $this->where = ' where ' . $where; } elseif(is_array($where) && !empty($where) ) { $count=count($where); $str=''; $i=1; foreach($where as $key=>$v) { $str .= "`".$key."` = '".$v."'"; if($i==$count) { continue; } if($count >1 ) { $str .=' and '; } $i++; } $this->where = ' where '.$str; } return $this; } /** * group() 函数 * @param $group 条件 * @return 返回该对象 */ public function group($group = '') { if (!empty($group)) { $this->group = ' group by ' . $group; } return $this; } /** * having() 函数 * @param $having 条件 * @return 返回该对象 */ public function having($having = '') { if (!empty($having)) { $this->having = ' having ' . $having; } return $this; } /** * order() 函数 * @param $order 条件 * @return 返回该对象 */ public function order($order = '') { if (!empty($order)) { $this->order = ' order by ' . $order; } return $this; } }