当前位置:   article > 正文

MySQL通用PHP类,非常完整的PHP的mysql类

php mysql 类

非常完整的PHP的MySQL操作类, 即使PDO, ActiveRecord, ORM, 框架, Framework… 都不如这个强大和好用. 有了它, 你就不会再需要任何MySQL封装了,此类已经在多个大型项目中得到广泛应用, 经过生产环境至少2年的检验.

现在就来看看这个类吧!

class Mysql{

var $conn;

var $query_list = array();

public $query_count = 0;

public function __construct($c){

if(!isset($c['port'])){

$c['port'] = '3306';

}

$server = $c['host'] . ':' . $c['port'];

$this->conn = mysql_connect($server, $c['username'], $c['password'], true) or die('connect db error');

mysql_select_db($c['dbname'], $this->conn) or die('select db error');

if($c['charset']){

mysql_query("set names " . $c['charset'], $this->conn);

}

}

/**

* 执行 mysql_query 并返回其结果.

*/

public function query($sql){

$stime = microtime(true);

$result = mysql_query($sql, $this->conn);

$this->query_count ++;

if($result === false){

throw new Exception(mysql_error($this->conn)." in SQL: $sql");

}

$etime = microtime(true);

$time = number_format(($etime - $stime) * 1000, 2);

$this->query_list[] = $time . ' ' . $sql;

return $result;

}

/**

* 执行 SQL 语句, 返回结果的第一条记录(是一个对象).

*/

public function get($sql){

$result = $this->query($sql);

if($row = mysql_fetch_object($result)){

return $row;

}else{

return null;

}

}

/**

* 返回查询结果集, 以 key 为键组织成关联数组, 每一个元素是一个对象.

* 如果 key 为空, 则将结果组织成普通的数组.

*/

public function find($sql, $key=null){

$data = array();

$result = $this->query($sql);

while($row = mysql_fetch_object($result)){

if(!empty($key)){

$data[$row->{$key}] = $row;

}else{

$data[] = $row;

}

}

return $data;

}

public function last_insert_id(){

return mysql_insert_id($this->conn);

}

/**

* 执行一条带有结果集计数的 count SQL 语句, 并返该计数.

*/

public function count($sql){

$result = $this->query($sql);

if($row = mysql_fetch_array($result)){

return (int)$row[0];

}else{

return 0;

}

}

/**

* 开始一个事务.

*/

public function begin(){

mysql_query('begin');

}

/**

* 提交一个事务.

*/

public function commit(){

mysql_query('commit');

}

/**

* 回滚一个事务.

*/

public function rollback(){

mysql_query('rollback');

}

/**

* 获取指定编号的记录.

* @param int $id 要获取的记录的编号.

* @param string $field 字段名, 默认为'id'.

*/

function load($table, $id, $field='id'){

$sql = "select * from `{$table}` where `{$field}`='{$id}'";

$row = $this->get($sql);

return $row;

}

/**

* 保存一条记录, 调用后, id被设置.

* @param object $row

*/

function save($table, &$row){

$sqlA = '';

foreach($row as $k=>$v){

$sqlA .= "`$k` = '$v',";

}

$sqlA = substr($sqlA, 0, strlen($sqlA)-1);

$sql = "insert into `{$table}` set $sqlA";

$this->query($sql);

if(is_object($row)){

$row->id = $this->last_insert_id();

}else if(is_array($row)){

$row['id'] = $this->last_insert_id();

}

}

/**

* 更新$arr[id]所指定的记录.

* @param array $row 要更新的记录, 键名为id的数组项的值指示了所要更新的记录.

* @return int 影响的行数.

* @param string $field 字段名, 默认为'id'.

*/

function update($table, &$row, $field='id'){

$sqlA = '';

foreach($row as $k=>$v){

$sqlA .= "`$k` = '$v',";

}

$sqlA = substr($sqlA, 0, strlen($sqlA)-1);

if(is_object($row)){

$id = $row->{$field};

}else if(is_array($row)){

$id = $row[$field];

}

$sql = "update `{$table}` set $sqlA where `{$field}`='$id'";

return $this->query($sql);

}

/**

* 删除一条记录.

* @param int $id 要删除的记录编号.

* @return int 影响的行数.

* @param string $field 字段名, 默认为'id'.

*/

function remove($table, $id, $field='id'){

$sql = "delete from `{$table}` where `{$field}`='{$id}'";

return $this->query($sql);

}

function escape(&$val){

if(is_object($val) || is_array($val)){

$this->escape_row($val);

}

}

function escape_row(&$row){

if(is_object($row)){

foreach($row as $k=>$v){

$row->$k = mysql_real_escape_string($v);

}

}else if(is_array($row)){

foreach($row as $k=>$v){

$row[$k] = mysql_real_escape_string($v);

}

}

}

function escape_like_string($str){

$find = array('%', '_');

$replace = array('\%', '\_');

$str = str_replace($find, $replace, $str);

return $str;

}

}

?>

使用例子:

<?php // 保存$db->save('table_1', $row);// 更新$db->update('table_1', $row);// 删除$db->remove('table_1', 1);// 查询$rows = $db->find($sql, 'id')?>

完善ecshop的mysql类

前篇文章中,我提及到了如何.但是没有数据库前缀的写法 废话不说,上步骤(目录结构请参考提取ecshop的mysql类) 修改connfig.php为 &l ...

提取ecshop的mysql类

在下一篇文章中,我还将介绍如何完善ecshop的mysql类,使用ecshop的数据库前缀 下载ecshop后,解压缩,进入目录upload/includes,复制里面的cls_mysql.php放进 ...

php四个常用类封装 :MySQL类、 分页类、缩略图类、上传类;;分页例子;

Mysql类 <?php /** * Mysql类 */ class Mysql{ private static $link = null;//数据库连接 /** * 私有的构造方法 */ pr ...

简单的php Mysql类(查询 删除 更新)

php Mysql类一般都包括了几乎我们常用的数据库操作方法,这里只提供了查询 删除 更新三种操作,算不是很全只是一个简单的数据库查询类了.      代码如下 复制代码 class mysql { ...

简单的一个MySQL类的实现:

'''定义MySQL类:1.对象有id.host.port三个属性2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一3.提供两种实例化方式,方式一:用户传入host和por ...

C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using Sy ...

C#---数据库访问通用类、Access数据库操作类、mysql类 .

//C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System. ...

9_13学习完整修改和查询&;&;实体类,数据访问类

完整修改和查询:中间变量运用. 1.先查 2.执行操作 ---------------------------------------------------- namespace ADO.NET_小 ...

封装mysql类

类: <?phpheader ("content-type:text/html;charset=utf-8");//封装一个类/*掌握满足单例模式的必要条件(1)私有的构造方法 ...

随机推荐

WPF入门教程系列十七——WPF中的数据绑定(三)

四. XML数据绑定 这次我们来学习新的绑定知识,XML数据绑定.XmlDataProvider 用来绑定 XML 数据,该XML数据可以是嵌入.Xmal文件的 XmlDataProvider 标记中 ...

LINQ 如何实现 in 与 not in

T-SQL的IN: Select ProductID, ProductName, CategoryID From dbo.Products Where CategoryID , ) T-SQL的NOT ...

STM32 SysTick定时器应用【worldsing笔记】

SysTick是CM内核独立的定时器,时钟可以用内核内部的,也可以用芯片厂家(ST)的时钟,参考的第13章: 另外也可以考

SVN中Branch的创建于合并

SVN中Branch的创建于合并 在使用源代码版本控制工具时,最佳实践是一直保持一个主干版本.但是为了应付实际开发中的各种情况,适时的开辟一些分支也是很有必要的.比如在持续开发新功能的同时,需要发布一 ...

HDU4046--Panda(树状数组)

Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

八.django模型系统(二)之常用查询及表关系的实现

Ⅰ.常用查询  1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...

POJ 1251 Jungle Roads (最小生成树)

题目: Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign ...

Python+Selenium+PageObject

一.安装page_objects测试库 二.目录介绍 1.pages包:用于各界面元素定位,如BaseLoginPage.py 2.testcases包:用于编写各功能测试用例,如Login.py 3 ...

使用css3实现动画来开启GPU加速

参考文章: https://www.w3cplus.com/css3/introduction-to-hardware-acceleration-css-animations.html http:// ...

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/558114
推荐阅读
相关标签
  

闽ICP备14008679号