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

  1. <?php
  2. /*
  3. 设计一个类:mysql数据库操作类
  4. 设计目标:
  5. 1,该类一实例化,就可以自动连接上mysql数据库;
  6. 2,该类可以单独去设定要使用的连接编码(set names XXX)
  7. 3,该类可以单独去设定要使用的数据库(use XXX);
  8. 4,可以主动关闭连接;
  9. */
  10. class MySqlDB{
  11. // 链接资源
  12. private $link = null;
  13.  
  14. // 构造方法
  15. function __construct($host='localhost', $port=3306, $user='root', $pwd='', $charset='utf8', $dbName='mysql'){
  16. $this->link = @mysql_connect("$host:$port", $user, $pwd); // @:阻止警告输出
  17. mysql_query("set names $charset"); // 设置编码
  18. mysql_query("use $dbName"); // 设置使用的数据库
  19. }
  20.  
  21. // 可设置链接编码
  22. function setCharset($charset){
  23. mysql_query("set names $charset");
  24. }
  25.  
  26. // 可设置使用的数据库
  27. function selectDB($dbName){
  28. mysql_query("use $dbName");
  29. }
  30.  
  31. // 可关闭链接
  32. function closeDB(){
  33. mysql_close($this->link);
  34. }
  35. }
  36.  
  37. # ************************* 测试 *************************
  38. $host = 'localhost';
  39. $port = 3306;
  40. $user = 'root';
  41. $pwd = '123456';
  42. $charset = 'utf8';
  43. $dbname = 'db1';
  44.  
  45. $db = new MySqlDB($host, $port, $user, $pwd, $charset, $dbname);
  46.  
  47. // 测试是否链接成功
  48. $set = mysql_query("select * from student");
  49. var_dump($set);
  50. echo "<br>";
  51.  
  52. // 测试修改编码
  53. $db->setCharset('gbk');
  54.  
  55. //********** 显示数据 **********
  56. echo "<table border='1'>";
  57. echo "<tr>";
  58. // 获得列数
  59. $field_count = mysql_num_fields($set);
  60. for($i=0; $i<$field_count; $i++){
  61. // 获得第 i 列的名称
  62. $field_name = mysql_field_name($set, $i);
  63. echo "<td>". $field_name . "</td>";
  64. }
  65. echo "</tr>";
  66. // 遍历每一行记录
  67. while($rec = mysql_fetch_array($set)){
  68. echo "<tr>";
  69.  
  70. for($i=0; $i<$field_count; $i++){
  71. // 获取列名
  72. $field_name = mysql_field_name($set, $i);
  73. // 获取该记录,改行的数据
  74. echo "<td>" . $rec[$field_name] . "</td>";
  75. }
  76.  
  77. echo "</tr>";
  78. }
  79.  
  80. echo "</table>";
  81.  
  82. // ********* end **********
  83.  
  84. // 测试关闭链接
  85. $db->closeDB();
  86. $set = @mysql_query("select * from student");
  87. var_dump($set);
  88. echo "<br>";
  89.  
  90. ?>

改进: 使用单例

  1. <?php
  2. /*
  3. 设计一个类:mysql数据库操作类
  4. 设计目标:
  5. 1,该类一实例化,就可以自动连接上mysql数据库;
  6. 2,该类可以单独去设定要使用的连接编码(set names XXX)
  7. 3,该类可以单独去设定要使用的数据库(use XXX);
  8. 4,可以主动关闭连接;
  9. */
  10.  
  11. class MySQLDB{
  12. private $link = null; // 用于存储成功链接后的资源
  13.  
  14. // 属性, 存储链接数据库的基本信息
  15. private $host;
  16. private $port;
  17. private $user;
  18. private $pwd;
  19. private $charset;
  20. private $dbname;
  21.  
  22. // 1)私有化构造方法
  23. private function __construct($config){
  24. // 保存链接的基本信息
  25. $this->host = !empty($config['host']) ? $config['host'] : "localhost";
  26. $this->port = !empty($config['port']) ? $config['port'] : "3306";
  27. $this->user = !empty($config['user']) ? $config['user'] : "root";
  28. $this->pwd = !empty($config['pwd']) ? $config['pwd'] : "";
  29. $this->charset = !empty($config['charset']) ? $config['charset'] : "utf8";
  30. $this->dbname = !empty($config['dbname']) ? $config['dbname'] : "mysql";
  31.  
  32. // 链接数据库
  33. $this->link = mysql_connect("{$this->host}:{$this->port}", "$this->user", "$this->pwd")
  34. or die("链接失败");
  35.  
  36. // 设定编码
  37. //mysql_query("set names {$config['charset']}");
  38. $this->setCharset($config['charset']);
  39.  
  40. // 设定要使用的数据库名
  41. //mysql_query("use {$config['dbname']}");
  42. $this->selectDB($config['dbname']);
  43. }
  44.  
  45. // 2)单例, 存储唯一实例
  46. private static $instance = null;
  47.  
  48. // 3)静态方法,获取唯一实例
  49. static function GetInstance($config){
  50. //if(!isset(self::$instance)){ // ==>等价于
  51. if(!(self::$instance instanceof self)){ // 更常用
  52. self::$instance = new self($config); // 创建并保存起来
  53. }
  54. return self::$instance;
  55. }
  56.  
  57. // 4)私有化克隆方法
  58. private function __clone(){}
  59.  
  60. // 可设定要使用的编码
  61. function setCharset($charset){
  62. mysql_query("set names $charset", $this->link);
  63. }
  64.  
  65. // 可设定要使用的数据库
  66. function selectDB($dbname){
  67. mysql_query("use $dbname", $this->link);
  68. }
  69.  
  70. // 可关闭数据库链接
  71. function closeDB(){
  72. mysql_close($this->link);
  73. }
  74.  
  75. // 执行 sql 语句,进行错误处理,并返回结果
  76. private function query($sql){
  77. $result = mysql_query($sql, $this->link);
  78. if($result === false){
  79. // 失败处理
  80. echo "sql语句执行失败,请参考如下信息:";
  81. echo "<br />错误代码: " . mysql_errno();
  82. echo "<br />错误信息: " . mysql_error();
  83. echo "<br />错误语句: " . $sql;
  84. die();
  85. }
  86. return $result;
  87. }
  88.  
  89. // 执行一条 增删改 sql语句,返回真或假
  90. function exec($sql){
  91. $result = $this->query($sql);
  92. return true;
  93. }
  94.  
  95. // 执行一条 sql 语句,返回一行记录
  96. function getOneRow($sql){
  97. $result = $this->query($sql);
  98. $rec = mysql_fetch_assoc($result);
  99. // 提前销毁结果集,否则需要等待页面结束才能自动销毁
  100. mysql_free_result($result);
  101. return $rec;
  102. }
  103.  
  104. // 执行一条 sql 语句,返回多行记录
  105. function getRows($sql){
  106. $result = $this->query($sql);
  107. $arr = array();
  108. while($rec = mysql_fetch_assoc($result)){
  109. $arr[] = $rec; // 二维数组
  110. }
  111.  
  112. mysql_free_result($result);
  113. return $arr;
  114. }
  115.  
  116. // 执行一条 sql 语句,直接返回一个结果
  117. // 类似于: select count(*) as c from user_list
  118. function getOneData($sql){
  119. $result = $this->query($sql);
  120. $rec = mysql_fetch_row($result);
  121. $data = $rec[0];
  122. mysql_free_result($result);
  123. return $data;
  124. }
  125. }
  126. ?>

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

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. 【iCore3 双核心板】DEMO 1.0 测试程序发布

    iCore3 Demo V1.0 程序说明 一.概要 本资料包包含5个文件夹: 1.“arm”里是 icore3上 arm的程序包,开发环境为 KEIL 5.17: 2.“fpga”里是 icore3 ...

  2. 如何正确使用css中vertical-align

    首先明确,vertical-align只对inline-block和inline元素有效. 在说vertical-align之前,需要先说明一下什么是line box. 浏览器中显示的一行会包含多个非 ...

  3. 友盟推送里面的Alias怎么用?可以理解成账号吗?

    友盟推送里面的Alias怎么用?可以理解成账号吗? 我们的App有自己的账号体系的,想在每次用户登陆的时候,给用户发一个欢迎消息. 看了一下友盟推送,里面有一个概念叫做Alias(别名),但是官方文档 ...

  4. UIBezierPath类 笔记

    使用UIBezierPath类可以创建基于矢量的路径.此类是Core Graphics框架关于path的一个封装.使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状.     ...

  5. 远程出发jenkins jobs

    wget -O - -q "http://jenkins_server/job/ttt/buildWithParameters?TEST1=Value" wget -O - -q ...

  6. 正则基础之——捕获组(capture group)

    1        概述 1.1     什么是捕获组 捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用.当然,这种引用既可以是在正则表达式内部,也可以是 ...

  7. 【C51】UART串口通信

    我们常需要单片机和其他模块进行通信,数据传输,常用的方式就是串口通信技术. 常用来 单片机<-->电脑,  单片机<-->单片机之间通信. 串行通信 versus 并行通信 并 ...

  8. JAVA 打出jar包

    1.eclipse下导出 jar包:选择项目右键--->Export...----> 选择java下的JAR file---->next--->选择存入路径--->nex ...

  9. 安卓和ios的lineheight的不一样如何解决?

    lineheight在pc端上显示很正常,但是在手机就很不同,在iphone6上,设置了lineheight,但是文本上面多了几像素,如果你设置lineheight在35px一下的按钮(用span做的 ...

  10. django静态文件数据库设置

    STATIC_URL = '/static/'STATICFILES_DIRS = (        os.path.join(BASE_DIR,'static')) DATABASES = {    ...