• 技术文章 >后端开发 >php教程

    一个php连接mysql数据库的类

    2016-07-25 08:59:06原创516
    1. /*
    2. * filename:mysql数据库连接类
    3. * edit bbs.it-home.org
    4. */
    5. class mysql{
    6. private $db_host; //数据库主机
    7. private $db_user; //数据库用户名
    8. private $db_pwd; //数据库用户名密码
    9. private $db_database; //数据库名
    10. private $conn; //数据库连接标识;
    11. private $result; //执行query命令的结果资源标识
    12. private $sql; //sql执行语句
    13. private $row; //返回的条目数
    14. private $coding; //数据库编码,GBK,UTF8,gb2312
    15. private $bulletin = true; //是否开启错误记录
    16. private $show_error = true; //测试阶段,显示所有错误,具有安全隐患,默认关闭
    17. private $is_error = false; //发现错误是否立即终止,默认true,建议不启用,因为当有问题时用户什么也看不到是很苦恼的
    18. /*构造函数*/
    19. public function __construct($db_host,$db_user,$db_pwd,$db_database,$conn,$coding){
    20. $this->db_host=$db_host;
    21. $this->db_user=$db_user;
    22. $this->db_pwd = $db_pwd;
    23. $this->db_database=$db_database;
    24. $this->conn=$conn;
    25. $this->coding=$coding;
    26. $this->connect();
    27. }
    28. /*数据库连接*/
    29. public function connect()
    30. {
    31. if($this->conn=="pconn"){
    32. //永久链接
    33. $this->conn=mysql_pconnect($this->db_host,$this->db_user,$this->db_pwd);
    34. }else{
    35. //即时链接
    36. $this->conn=mysql_connect($this->db_host,$this->db_user,$this->db_pwd);
    37. }
    38. if(!mysql_select_db($this->db_database,$this->conn)){
    39. if($this->show_error){
    40. $this->show_error("数据库不可用:",$this->db_database);
    41. }
    42. }
    43. mysql_query("SET NAMES $this->coding");
    44. }
    45. /*数据库执行语句,可执行查询添加修改删除等任何sql语句*/
    46. public function query($sql)
    47. {
    48. if($sql == ""){
    49. $this->show_error("sql语句错误:","sql查询语句为空");}
    50. $this->sql = $sql;
    51. $result = mysql_query($this->sql,$this->conn);
    52. if(!$result){
    53. //调试中使用,sql语句出错时会自动打印出来
    54. if($this->show_error){
    55. $this->show_error("错误sql语句:",$this->sql);
    56. }
    57. }else{
    58. $this->result = $result;
    59. }
    60. return $this->result;
    61. }
    62. /*创建添加新的数据库*/
    63. public function create_database($database_name){
    64. $database=$database_name;
    65. $sqlDatabase = 'create database '.$database;
    66. $this->query($sqlDatabase);
    67. }
    68. /*查询服务器所有数据库*/
    69. //将系统数据库与用户数据库分开,更直观的显示?
    70. public function show_databases(){
    71. $rs=$this->query("show databases");
    72. echo "现有数据库:".$amount =$this->db_num_rows($rs);
    73. echo "
      ";
    74. $i=1;
    75. while($row = $this->fetch_array($rs)){
    76. echo "$i $row[Database]";
    77. echo "
      ";
    78. $i++;
    79. }
    80. }
    81. //以数组形式返回主机中所有数据库名
    82. public function databases()
    83. {
    84. $rsPtr=mysql_list_dbs($this->conn);
    85. $i=0;
    86. $cnt=mysql_num_rows($rsPtr);
    87. while($i<$cnt)
    88. {
    89. $rs[]=mysql_db_name($rsPtr,$i);
    90. $i++;
    91. }
    92. return $rs;
    93. }
    94. /*查询数据库下所有的表*/
    95. function show_tables($database_name){
    96. $this->query("show tables");
    97. echo "现有数据库:".$amount = $this->db_num_rows($rs);
    98. echo "
      ";
    99. $i=1;
    100. while($row = $this->fetch_array($rs)){
    101. $columnName="Tables_in_".$database_name;
    102. echo "$i $row[$columnName]";
    103. echo "
      ";
    104. $i++;
    105. }
    106. }
    107. /*
    108. mysql_fetch_row() array $row[0],$row[1],$row[2]
    109. mysql_fetch_array() array $row[0] 或 $row[id]
    110. mysql_fetch_assoc() array 用$row->content 字段大小写敏感
    111. mysql_fetch_object() object 用$row[id],$row[content] 字段大小写敏感
    112. */
    113. /*取得结果数据*/
    114. public function mysql_result_li()
    115. {
    116. return mysql_result($str);
    117. }
    118. /*取得记录集,获取数组-索引和关联,使用$row['content'] */
    119. public function fetch_array()
    120. {
    121. return mysql_fetch_array($this->result);
    122. }
    123. //获取关联数组,使用$row['字段名']
    124. public function fetch_assoc()
    125. {
    126. return mysql_fetch_assoc($this->result);
    127. }
    128. //获取数字索引数组,使用$row[0],$row[1],$row[2]
    129. public function fetch_row()
    130. {
    131. return mysql_fetch_row($this->result);
    132. }
    133. //获取对象数组,使用$row->content
    134. public function fetch_Object()
    135. {
    136. return mysql_fetch_object($this->result);
    137. }
    138. //简化查询select
    139. public function findall($table)
    140. {
    141. $this->query("SELECT * FROM $table");
    142. }
    143. //简化查询select
    144. public function select($table,$columnName,$condition)
    145. {
    146. if($columnName==""){
    147. $columnName="*";
    148. }
    149. $this->query("SELECT $columnName FROM $table $condition");
    150. }
    151. //简化删除del
    152. public function delete($table,$condition){
    153. $this->query("DELETE FROM $table WHERE $condition");
    154. }
    155. //简化插入insert
    156. public function insert($table,$columnName,$value){
    157. $this->query("INSERT INTO $table ($columnName) VALUES ($value)");
    158. }
    159. //简化修改update
    160. public function update($table,$mod_content,$condition){
    161. $this->query("UPDATE $table SET $mod_content WHERE $condition");
    162. }
    163. /*取得上一步 INSERT 操作产生的 ID*/
    164. public function insert_id(){
    165. return mysql_insert_id();
    166. }
    167. //指向确定的一条数据记录
    168. public function db_data_seek($id){
    169. if($id>0){
    170. $id=$id-1;
    171. }
    172. if(!@mysql_data_seek($this->result,$id)){
    173. $this->show_error("sql语句有误:", "指定的数据为空");
    174. }
    175. return $this->result;
    176. }
    177. // 根据select查询结果计算结果集条数
    178. public function db_num_rows(){
    179. if($this->result==null){
    180. if($this->show_error){
    181. $this->show_error("sql语句错误","暂时为空,没有任何内容!");
    182. }
    183. }else{
    184. return mysql_num_rows($this->result);
    185. }
    186. }
    187. // 根据insert,update,delete执行结果取得影响行数
    188. public function db_affected_rows(){
    189. return mysql_affected_rows();
    190. }
    191. //输出显示sql语句
    192. public function show_error($message="",$sql=""){
    193. if(!$sql){
    194. echo "".$message."";
    195. echo "
      ";
    196. }else{
    197. echo "
      ";
    198. echo "错误信息提示:
      ";
    199. echo "
      ";
    200. echo "
      ";
    201. echo "错误号:12142";
    202. echo "

    ";
  • echo "错误原因:".mysql_error()."

    ";
  • echo "
    ";
  • echo "".$message."";
  • echo "
  • ";
  • echo "
    ".$sql."
    ";
  • $ip=$this->getip();
  • if($this->bulletin){
  • $time = date("Y-m-d H:i:s");
  • $message=$message."/r/n$this->sql"."/r/n客户IP:$ip"."/r/n时间 :$time"."/r/n/r/n";
  • $server_date=date("Y-m-d");
  • $filename=$server_date.".txt";
  • $file_path="error/".$filename;
  • $error_content=$message;
  • //$error_content="错误的数据库,不可以链接";
  • $file = "error"; //设置文件保存目录
  • //建立文件夹
  • if(!file_exists($file)){
  • if(!mkdir($file,0777)){
  • //默认的 mode 是 0777,意味着最大可能的访问权
  • die("upload files directory does not exist and creation failed");
  • }
  • }
  • //建立txt日期文件
  • if(!file_exists($file_path)){
  • //echo "建立日期文件";
  • fopen($file_path,"w+");
  • //首先要确定文件存在并且可写
  • if (is_writable($file_path))
  • {
  • //使用添加模式打开$filename,文件指针将会在文件的开头
  • if (!$handle = fopen($file_path, 'a'))
  • {
  • echo "不能打开文件 $filename";
  • exit;
  • }
  • //将$somecontent写入到我们打开的文件中。
  • if (!fwrite($handle, $error_content))
  • {
  • echo "不能写入到文件 $filename";
  • exit;
  • }
  • //echo "文件 $filename 写入成功";
  • echo "——错误记录被保存!";
  • //关闭文件
  • fclose($handle);
  • } else {
  • echo "文件 $filename 不可写";
  • }
  • }else{
  • //首先要确定文件存在并且可写
  • if (is_writable($file_path))
  • {
  • //使用添加模式打开$filename,文件指针将会在文件的开头
  • if (!$handle = fopen($file_path, 'a'))
  • {
  • echo "不能打开文件 $filename";
  • exit;
  • }
  • //将$somecontent写入到我们打开的文件中。
  • if (!fwrite($handle, $error_content))
  • {
  • echo "不能写入到文件 $filename";
  • exit;
  • }
  • //echo "文件 $filename 写入成功";
  • echo "——错误记录被保存!";
  • //关闭文件
  • fclose($handle);
  • } else {
  • echo "文件 $filename 不可写";
  • }
  • }
  • }
  • echo "
    ";
  • if($this->is_error){
  • exit;
  • }
  • }
  • echo "";
  • echo "";
  • echo "
    ";
  • }
  • //释放结果集
  • public function free(){
  • @mysql_free_result($this->result);
  • }
  • //数据库选择
  • public function select_db($db_database){
  • return mysql_select_db($db_database);
  • }
  • //查询字段数量
  • public function num_fields($table_name){
  • //return mysql_num_fields($this->result);
  • $this->query("select * from $table_name");
  • echo "
    ";
  • echo "字段数:".$total = mysql_num_fields($this->result);
  • echo "
    ";
  • for ($i=0; $i<$total; $i++){
  • print_r(mysql_fetch_field($this->result,$i) );
  • }
  • echo "
  • ";
  • echo "
    ";
  • }
  • //取得 MySQL 服务器信息
  • public function mysql_server($num=''){
  • switch ($num){
  • case 1 :
  • return mysql_get_server_info(); //MySQL 服务器信息
  • break;
  • case 2 :
  • return mysql_get_host_info(); //取得 MySQL 主机信息
  • break;
  • case 3 :
  • return mysql_get_client_info(); //取得 MySQL 客户端信息
  • break;
  • case 4 :
  • return mysql_get_proto_info(); //取得 MySQL 协议信息
  • break;
  • default:
  • return mysql_get_client_info(); //默认取得mysql版本信息
  • }
  • }
  • //析构函数,自动关闭数据库,垃圾回收机制
  • public function __destruct()
  • {
  • if(!empty($this->result)){
  • $this->free();
  • }
  • mysql_close($this->conn);
  • }//function __destruct();
  • /*获得客户端真实的IP地址*/
  • function getip(){
  • if(getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
  • {
  • $ip = getenv("HTTP_CLIENT_IP");
  • }
  • else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")){
  • $ip = getenv("HTTP_X_FORWARDED_FOR");
  • }
  • else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
  • {
  • $ip = getenv("REMOTE_ADDR");
  • }
  • else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")){
  • $ip = $_SERVER['REMOTE_ADDR'];
  • }
  • else{
  • $ip = "unknown";
  • }
  • return($ip);
  • }
  • }
  • ?>复制代码


  • php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    千万级数据并发解决方案(理论+实战):点击学习

    Mysql单表千万级数据量的查询优化与性能分析

    Mysql主从原理及其在高并发系统中的应用

    专题推荐:一个php连接mysql数据库的类
    上一篇:php浏览目录中文件内容的代码举例 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• PHP8.2发布了,快来看看有什么改动!• PHP5中Cookie与 Session使用详解_PHP• PHP中Session引起的脚本阻塞问题解决办法_php实例• php网站判断用户是否是手机访问的方法_php实例• 各位老师,帮小弟我看看能不能改成支持可分页
    1/1

    PHP中文网