设计目标:
  1,该类一实例化,就可以自动连接上mysql数据库;
  2,该类可以单独去设定要使用的连接编码(set names XXX)
  3,该类可以单独去设定要使用的数据库(use XXX);
  4,可以主动关闭连接;

<?php
/*
设计一个类:mysql数据库操作类
设计目标:
1,该类一实例化,就可以自动连接上mysql数据库;
2,该类可以单独去设定要使用的连接编码(set names XXX)
3,该类可以单独去设定要使用的数据库(use XXX);
4,可以主动关闭连接;
*/
class MySqlDB{
// 链接资源
private $link = null; // 构造方法
function __construct($host='localhost', $port=3306, $user='root', $pwd='', $charset='utf8', $dbName='mysql'){
$this->link = @mysql_connect("$host:$port", $user, $pwd); // @:阻止警告输出
mysql_query("set names $charset"); // 设置编码
mysql_query("use $dbName"); // 设置使用的数据库
} // 可设置链接编码
function setCharset($charset){
mysql_query("set names $charset");
} // 可设置使用的数据库
function selectDB($dbName){
mysql_query("use $dbName");
} // 可关闭链接
function closeDB(){
mysql_close($this->link);
}
} # ************************* 测试 *************************
$host = 'localhost';
$port = 3306;
$user = 'root';
$pwd = '123456';
$charset = 'utf8';
$dbname = 'db1'; $db = new MySqlDB($host, $port, $user, $pwd, $charset, $dbname); // 测试是否链接成功
$set = mysql_query("select * from student");
var_dump($set);
echo "<br>"; // 测试修改编码
$db->setCharset('gbk'); //********** 显示数据 **********
echo "<table border='1'>";
echo "<tr>";
// 获得列数
$field_count = mysql_num_fields($set);
for($i=0; $i<$field_count; $i++){
// 获得第 i 列的名称
$field_name = mysql_field_name($set, $i);
echo "<td>". $field_name . "</td>";
}
echo "</tr>";
// 遍历每一行记录
while($rec = mysql_fetch_array($set)){
echo "<tr>"; for($i=0; $i<$field_count; $i++){
// 获取列名
$field_name = mysql_field_name($set, $i);
// 获取该记录,改行的数据
echo "<td>" . $rec[$field_name] . "</td>";
} echo "</tr>";
} echo "</table>"; // ********* end ********** // 测试关闭链接
$db->closeDB();
$set = @mysql_query("select * from student");
var_dump($set);
echo "<br>"; ?>

改进: 使用单例

<?php
/*
设计一个类:mysql数据库操作类
设计目标:
1,该类一实例化,就可以自动连接上mysql数据库;
2,该类可以单独去设定要使用的连接编码(set names XXX)
3,该类可以单独去设定要使用的数据库(use XXX);
4,可以主动关闭连接;
*/ class MySQLDB{
private $link = null; // 用于存储成功链接后的资源 // 属性, 存储链接数据库的基本信息
private $host;
private $port;
private $user;
private $pwd;
private $charset;
private $dbname; // 1)私有化构造方法
private function __construct($config){
// 保存链接的基本信息
$this->host = !empty($config['host']) ? $config['host'] : "localhost";
$this->port = !empty($config['port']) ? $config['port'] : "3306";
$this->user = !empty($config['user']) ? $config['user'] : "root";
$this->pwd = !empty($config['pwd']) ? $config['pwd'] : "";
$this->charset = !empty($config['charset']) ? $config['charset'] : "utf8";
$this->dbname = !empty($config['dbname']) ? $config['dbname'] : "mysql"; // 链接数据库
$this->link = mysql_connect("{$this->host}:{$this->port}", "$this->user", "$this->pwd")
or die("链接失败"); // 设定编码
//mysql_query("set names {$config['charset']}");
$this->setCharset($config['charset']); // 设定要使用的数据库名
//mysql_query("use {$config['dbname']}");
$this->selectDB($config['dbname']);
} // 2)单例, 存储唯一实例
private static $instance = null; // 3)静态方法,获取唯一实例
static function GetInstance($config){
//if(!isset(self::$instance)){ // ==>等价于
if(!(self::$instance instanceof self)){ // 更常用
self::$instance = new self($config); // 创建并保存起来
}
return self::$instance;
} // 4)私有化克隆方法
private function __clone(){} // 可设定要使用的编码
function setCharset($charset){
mysql_query("set names $charset", $this->link);
} // 可设定要使用的数据库
function selectDB($dbname){
mysql_query("use $dbname", $this->link);
} // 可关闭数据库链接
function closeDB(){
mysql_close($this->link);
} // 执行 sql 语句,进行错误处理,并返回结果
private function query($sql){
$result = mysql_query($sql, $this->link);
if($result === false){
// 失败处理
echo "sql语句执行失败,请参考如下信息:";
echo "<br />错误代码: " . mysql_errno();
echo "<br />错误信息: " . mysql_error();
echo "<br />错误语句: " . $sql;
die();
}
return $result;
} // 执行一条 增删改 sql语句,返回真或假
function exec($sql){
$result = $this->query($sql);
return true;
} // 执行一条 sql 语句,返回一行记录
function getOneRow($sql){
$result = $this->query($sql);
$rec = mysql_fetch_assoc($result);
// 提前销毁结果集,否则需要等待页面结束才能自动销毁
mysql_free_result($result);
return $rec;
} // 执行一条 sql 语句,返回多行记录
function getRows($sql){
$result = $this->query($sql);
$arr = array();
while($rec = mysql_fetch_assoc($result)){
$arr[] = $rec; // 二维数组
} mysql_free_result($result);
return $arr;
} // 执行一条 sql 语句,直接返回一个结果
// 类似于: select count(*) as c from user_list
function getOneData($sql){
$result = $this->query($sql);
$rec = mysql_fetch_row($result);
$data = $rec[0];
mysql_free_result($result);
return $data;
}
}
?>

-------------->>>

php : mysql数据库操作类演示的更多相关文章

  1. php MySQL数据库操作类源代码

    php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...

  2. 设计模式 - 单例模式mysql数据库操作类

    待续... index.php 调用方法: <?php header('Content-Type:text/html; charset=utf8'); require 'instance.php ...

  3. MySQL数据库操作类(PHP实现,支持连贯操作)

    <?php /** * Author: suvan * CreateTime: 2018/2/27 * description: 数据库操作类(仅对接MySQL数据库,主要利用MySQLi函数) ...

  4. php pdo mysql数据库操作类

    <?php namespace iphp\core; use iphp\App; /** * 数据库操作基类 基于pdo * @author xuen * 支持链式操作,支持参数绑定 * 说明1 ...

  5. Java数据库操作类演示

    只在mysql上测试过,不知道算不算好使​1. [代码][Java]代码     package org.load.demo; import java.io.IOException;import ja ...

  6. php 封装mysql 数据库操作类

    <?phpheader('content-type:text/html;charset=utf-8');//封装mysql   连接数据库php_mysql//封装mysql   连接数据库ph ...

  7. C# MySQL 数据库操作类

    using System; using System.Configuration; using System.Collections; using System.Data; using MySql.D ...

  8. DELPHI XE MYSQL数据库操作类 MYSQLHELPER

    注: 无需odbc配置 {* * MySQL Helper v1.0 * 2015.6.19 * 说明: * 这是一个操作MySQL的类,该类必须和libmysql.dll,dbxmys.dll两个文 ...

  9. php中用面向对象的思想编写mysql数据库操作类

    最近刚入门完mysql,正好学了一阵子php就想着如何把mysql的表信息用php打印页面上.现在就把代码贴出来,以便小伙伴们参考. 先是建立mysql连接: /*建立连接*/ class datab ...

随机推荐

  1. NFS服务器搭建

    1. 安装nfs-kernel-server,然后编辑/etc/exports. /sambadata/nfsserver    10.0.0.0/255.255.255.0(fsid=0,all_s ...

  2. Android 网络通信框架Volley简介

    1.1. Volley引入的背景在以前,我们可能面临如下很多麻烦的问题. 比如以前从网上下载图片的步骤可能是这样的流程: 在ListAdapter#getView()里开始图像的读取. 通过Async ...

  3. Mongo聚合函数

    { "_id" : ObjectId("57301c7e5fd5d6e2afa221d1"), "a" : "张三", ...

  4. Convert Sorted Array to Binary Search Tree || LeetCode

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * s ...

  5. Assets和Raw区别

    在建立项目中一般会默认建立assets文件,当然我们还可以在res文件下面建立raw文件夹,这里面都可以存放一些多媒体文件或者文本信息,可以供我们在程序中使用. assets下面的文件不会被编译,通过 ...

  6. Line segment matching

    FMII2方法:FMII方法的轻微的修改.有限线段和无限线段(直线)的匹配. 求解方法: SVD分解 Unit Quaternion 协方差矩阵: 通过对C进行SVD分解得到R,根据R求得T. 算法流 ...

  7. ASP.NET 5

    docs.asp.net installing on windows Choosing the Right .NET For You on the Server DotNetCore: DotNetC ...

  8. Java Servlet(五):GenericServlet与Servlet、HttpServlet之间的关系(jdk7+tomcat7+eclipse)

    本篇主要记录下,对GenericServlet的作用理解,及其与Servlet/HttpServlet之间的关系. 示例完成业务: 1.新建一个login.jsp页面,要求改页面能输入username ...

  9. Robot framework + appium环境搭建

    Robot framework+appium环境搭建 首先梳理一下要用到的工具和安装包: 1. Android + JAVA. jdk : http://www.oracle.com/technetw ...

  10. 刨根问底U3D---Vector3 你到底是蔬菜呢还是水果呢?

    事情的起因还是因为一段代码,因为在做一个2D TileBase的游戏 所以需要有一个简单的 Tile坐标到世界坐标的变换 public static Vector3 GetTileWorldPosBy ...