thinkphp mysql函数_php封装的数据库函数与用法示例【参考thinkPHP】

本文实例讲述了php封装的数据库函数与用法。分享给大家供大家参考,具体如下:

从Thinkphp里面抽离出来的数据库模块,感觉挺好用

common.php:

/**

* 通用函数

*/

//包含配置文件

if (is_file("config.php")) {

C(include 'config.php');

}

if (!function_exists("__autoload")) {

function __autoload($class_name) {

require_once('classes/' . $class_name . '.class.php');

}

}

/**

* 数据库操作函数

* @return \mysqli

*/

function M() {

$db = new Model();

if (mysqli_connect_errno())

throw_exception(mysqli_connect_error());

return $db;

}

// 获取配置值

function C($name = null, $value = null) {

//静态全局变量,后面的使用取值都是在 $)config数组取

static $_config = array();

// 无参数时获取所有

if (empty($name))

return $_config;

// 优先执行设置获取或赋值

if (is_string($name)) {

if (!strpos($name, '.')) {

$name = strtolower($name);

if (is_null($value))

return isset($_config[$name]) ? $_config[$name] : null;

$_config[$name] = $value;

return;

}

// 二维数组设置和获取支持

$name = explode('.', $name);

$name[0] = strtolower($name[0]);

if (is_null($value))

return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;

$_config[$name[0]][$name[1]] = $value;

return;

}

// 批量设置

if (is_array($name)) {

return $_config = array_merge($_config, array_change_key_case($name));

}

return null; // 避免非法参数

}

function ajaxReturn($data = null, $message = "", $status) {

$ret = array();

$ret["data"] = $data;

$ret["message"] = $message;

$ret["status"] = $status;

echo json_encode($ret);

die();

}

//调试数组

function _dump($var) {

if (C("debug"))

dump($var);

}

// 浏览器友好的变量输出

function dump($var, $echo = true, $label = null, $strict = true) {

$label = ($label === null) ? '' : rtrim($label) . ' ';

if (!$strict) {

if (ini_get('html_errors')) {

$output = print_r($var, true);

$output = '

' . $label . htmlspecialchars($output, ENT_QUOTES) . '
';

} else {

$output = $label . print_r($var, true);

}

} else {

ob_start();

var_dump($var);

$output = ob_get_clean();

if (!extension_loaded('xdebug')) {

$output = preg_replace("/\]\=\>\n(\s+)/m", '] => ', $output);

$output = '

' . $label . htmlspecialchars($output, ENT_QUOTES) . '
';

}

}

if ($echo) {

echo($output);

return null;

}

else

return $output;

}

/**

* 调试输出

* @param type $msg

*/

function _debug($msg) {

if (C("debug"))

echo "$msg
";

}

function _log($filename, $msg) {

$time = date("Y-m-d H:i:s");

$msg = "[$time]\n$msg\r\n";

if (C("log")) {

$fd = fopen($filename, "a+");

fwrite($fd, $msg);

fclose($fd);

}

}

/**

* 日志记录

* @param type $str

*/

function L($msg) {

$time = date("Y-m-d H:i:s");

$clientIP = $_SERVER['REMOTE_ADDR'];

$msg = "[$time $clientIP] $msg\r\n";

$log_file = C("LOGFILE");

_log($log_file, $msg);

}

?>

config.php:

/**

* 数据库配置文件

*/

$db = array(

'DB_TYPE' => 'mysql',

'DB_HOST' => '127.0.0.1',

'DB_NAME' => 'DB',

'DB_USER' => 'USER',

'DB_PWD' => 'PWD',

'DB_PORT' => '3306',

);

return $db;

?>

数据库模型类Model.class.php,放到classes/目录下:

/**

* 数据库模型类

*/

class Model {

// 数据库连接ID 支持多个连接

protected $linkID = array();

// 当前数据库操作对象

protected $db = null;

// 当前查询ID

protected $queryID = null;

// 当前SQL指令

protected $queryStr = '';

// 是否已经连接数据库

protected $connected = false;

// 返回或者影响记录数

protected $numRows = 0;

// 返回字段数

protected $numCols = 0;

// 最近错误信息

protected $error = '';

public function __construct() {

$this->db = $this->connect();

}

/**

* 连接数据库方法

*/

public function connect($config = '', $linkNum = 0) {

if (!isset($this->linkID[$linkNum])) {

if (empty($config))

$config = array(

'username' => C('DB_USER'),

'password' => C('DB_PWD'),

'hostname' => C('DB_HOST'),

'hostport' => C('DB_PORT'),

'database' => C('DB_NAME')

);

$this->linkID[$linkNum] = new mysqli($config['hostname'], $config['username'], $config['password'], $config['database'], $config['hostport'] ? intval($config['hostport']) : 3306);

if (mysqli_connect_errno())

throw_exception(mysqli_connect_error());

$this->connected = true;

}

return $this->linkID[$linkNum];

}

/**

* 初始化数据库连接

*/

protected function initConnect() {

if (!$this->connected) {

$this->db = $this->connect();

}

}

/**

* 获得所有的查询数据

* @access private

* @param string $sql sql语句

* @return array

*/

public function select($sql) {

$this->initConnect();

if (!$this->db)

return false;

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

$list = array();

if (!$query)

return $list;

while ($rows = $query->fetch_assoc()) {

$list[] = $rows;

}

return $list;

}

/**

* 只查询一条数据

*/

public function find($sql) {

$resultSet = $this->select($sql);

if (false === $resultSet) {

return false;

}

if (empty($resultSet)) {// 查询结果为空

return null;

}

$data = $resultSet[0];

return $data;

}

/**

* 获取一条记录的某个字段值 , sql 由自己组织

* 例子: $model->getField("select id from user limit 1")

*/

public function getField($sql) {

$resultSet = $this->select($sql);

if (!empty($resultSet)) {

return reset($resultSet[0]);

}

}

/**

* 执行查询 返回数据集

*/

public function query($str) {

$this->initConnect();

if (!$this->db) {

if (C("debug"))

echo "connect to database error";

return false;

}

$this->queryStr = $str;

//释放前次的查询结果

if ($this->queryID)

$this->free();

$this->queryID = $this->db->query($str);

// 对存储过程改进

if ($this->db->more_results()) {

while (($res = $this->db->next_result()) != NULL) {

$res->free_result();

}

}

//$this->debug();

if (false === $this->queryID) {

echo $this->error();

return false;

} else {

$this->numRows = $this->queryID->num_rows;

$this->numCols = $this->queryID->field_count;

return $this->getAll();

}

}

/**

* 执行语句 , 例如插入,更新操作

* @access public

* @param string $str sql指令

* @return integer

*/

public function execute($str) {

$this->initConnect();

if (!$this->db)

return false;

$this->queryStr = $str;

//释放前次的查询结果

if ($this->queryID)

$this->free();

$result = $this->db->query($str);

if (false === $result) {

$this->error();

return false;

} else {

$this->numRows = $this->db->affected_rows;

$this->lastInsID = $this->db->insert_id;

return $this->numRows;

}

}

/**

* 获得所有的查询数据

* @access private

* @param string $sql sql语句

* @return array

*/

private function getAll() {

//返回数据集

$result = array();

if ($this->numRows > 0) {

//返回数据集

for ($i = 0; $i < $this->numRows; $i++) {

$result[$i] = $this->queryID->fetch_assoc();

}

$this->queryID->data_seek(0);

}

return $result;

}

/**

* 返回最后插入的ID

*/

public function getLastInsID() {

return $this->db->insert_id;

}

// 返回最后执行的sql语句

public function _sql() {

return $this->queryStr;

}

/**

* 数据库错误信息

*/

public function error() {

$this->error = $this->db->errno . ':' . $this->db->error;

if ('' != $this->queryStr) {

$this->error .= "\n [ SQL语句 ] : " . $this->queryStr;

}

//trace($this->error, '', 'ERR');

return $this->error;

}

/**

* 释放查询结果

*/

public function free() {

$this->queryID->free_result();

$this->queryID = null;

}

/**

* 关闭数据库

*/

public function close() {

if ($this->db) {

$this->db->close();

}

$this->db = null;

}

/**

* 析构方法

*/

public function __destruct() {

if ($this->queryID) {

$this->free();

}

// 关闭连接

$this->close();

}

}

例子:

#include "common.php"

function test(){

$model = M();

$sql = "select * from test";

$list = $model->query($sql);

_dump($list);

}

希望本文所述对大家PHP程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值