完整的PHP MYSQL数据库类

<?php
class  mysql {
     private  $db_host ; //数据库主机
     private  $db_user ; //数据库用户名
     private  $db_pwd ; //数据库用户名密码
     private  $db_database ; //数据库名
     private  $conn ; //数据库连接标识;
     private  $result ; //执行query命令的结果资源标识
     private  $sql ; //sql执行语句
     private  $row ; //返回的条目数
     private  $coding ; //数据库编码,GBK,UTF8,gb2312
     private  $bulletin  = true; //是否开启错误记录
     private  $show_error  = false; //测试阶段,显示所有错误,具有安全隐患,默认关闭
     private  $is_error  = false; //发现错误是否立即终止,默认true,建议不启用,因为当有问题时用户什么也看不到是很苦恼的
 
     /*构造函数*/
     public  function  __construct( $db_host , $db_user , $db_pwd , $db_database , $conn , $coding ) {
         $this ->db_host = $db_host ;
         $this ->db_user = $db_user ;
         $this ->db_pwd = $db_pwd ;
         $this ->db_database = $db_database ;
         $this ->conn = $conn ;
         $this ->coding = $coding ;
         $this ->connect();
     }
 
     /*数据库连接*/
     public  function  connect() {
         if  ( $this ->conn == "pconn" ) {
             //永久链接
             $this ->conn = mysql_pconnect( $this ->db_host, $this ->db_user, $this ->db_pwd);
         } else  {
             //即使链接
             $this ->conn = mysql_connect( $this ->db_host, $this ->db_user, $this ->db_pwd);
         }
 
         if  (!mysql_select_db( $this ->db_database, $this ->conn)) {
             if  ( $this ->show_error) {
                 $this ->show_error( "数据库不可用:" , $this ->db_database);
             }
         }
         mysql_query( "SET NAMES $this->coding" );
     }
 
     /*数据库执行语句,可执行查询添加修改删除等任何sql语句*/
     public  function  query( $sql ) {
         if  ( $sql  == "" ) {
             $this ->show_error( "SQL语句错误:" , "SQL查询语句为空" );
         }
         $this ->sql = $sql ;
 
         $result  = mysql_query( $this ->sql, $this ->conn);
 
         if  (! $result ) {
             //调试中使用,sql语句出错时会自动打印出来
             if  ( $this ->show_error) {
                 $this ->show_error( "错误SQL语句:" , $this ->sql);
             }
         } else  {
             $this ->result = $result ;
         }
         return  $this ->result;
     }
 
     /*创建添加新的数据库*/
     public  function  create_database( $database_name ) {
         $database  = $database_name ;
         $sqlDatabase  = 'create database '  . $database ;
         $this ->query( $sqlDatabase );
     }
 
     /*查询服务器所有数据库*/
     //将系统数据库与用户数据库分开,更直观的显示?
     public  function  show_databases() {
         $this ->query( "show databases" );
         echo  "现有数据库:"  . $amount  = $this ->db_num_rows( $rs );
         echo  "<br />" ;
         $i  = 1;
         while  ( $row  = $this ->fetch_array( $rs )) {
             echo  "$i $row[Database]" ;
             echo  "<br />" ;
             $i ++;
         }
     }
 
     //以数组形式返回主机中所有数据库名
     public  function  databases() {
         $rsPtr  = mysql_list_dbs( $this ->conn);
         $i  = 0;
         $cnt  = mysql_num_rows( $rsPtr );
         while  ( $i  < $cnt ) {
             $rs [] = mysql_db_name( $rsPtr , $i );
             $i ++;
         }
         return  $rs ;
     }
 
     /*查询数据库下所有的表*/
     public  function  show_tables( $database_name ) {
         $this ->query( "show tables" );
         echo  "现有数据库:"  . $amount  = $this ->db_num_rows( $rs );
         echo  "<br />" ;
         $i  = 1;
         while  ( $row  = $this ->fetch_array( $rs )) {
             $columnName  = "Tables_in_"  . $database_name ;
             echo  "$i $row[$columnName]" ;
             echo  "<br />" ;
             $i ++;
         }
     }
 
     /*
     mysql_fetch_row()    array  $row[0],$row[1],$row[2]
     mysql_fetch_array()  array  $row[0] 或 $row[id]
     mysql_fetch_assoc()  array  用$row->content 字段大小写敏感
     mysql_fetch_object() object 用$row[id],$row[content] 字段大小写敏感
     */
 
     /*取得结果数据*/
     public  function  mysql_result_li() {
         return  mysql_result( $str );
     }
 
     /*取得记录集,获取数组-索引和关联,使用$row['content'] */
     public  function  fetch_array( $resultt = "" ) {
         if ( $resultt <> "" ){
             return  mysql_fetch_array( $resultt );
         } else {
         return  mysql_fetch_array( $this ->result);
         }
     }
 
     //获取关联数组,使用$row['字段名']
     public  function  fetch_assoc() {
         return  mysql_fetch_assoc( $this ->result);
     }
 
     //获取数字索引数组,使用$row[0],$row[1],$row[2]
     public  function  fetch_row() {
         return  mysql_fetch_row( $this ->result);
     }
 
     //获取对象数组,使用$row->content
     public  function  fetch_Object() {
         return  mysql_fetch_object( $this ->result);
     }
 
     //简化查询select
     public  function  findall( $table ) {
         $this ->query( "SELECT * FROM $table" );
     }
 
     //简化查询select
     public  function  select( $table , $columnName  = "*" , $condition  = '' , $debug  = '' ) {
         $condition  = $condition  ? ' Where '  . $condition  : NULL;
         if  ( $debug ) {
             echo  "SELECT $columnName FROM $table $condition" ;
         } else  {
             $this ->query( "SELECT $columnName FROM $table $condition" );
         }
     }
 
     //简化删除del
     public  function  delete ( $table , $condition , $url  = '' ) {
         if  ( $this ->query( "DELETE FROM $table WHERE $condition" )) {
             if  (! empty  ( $url ))
                 $this ->Get_admin_msg( $url , '删除成功!' );
         }
     }
 
     //简化插入insert
     public  function  insert( $table , $columnName , $value , $url  = '' ) {
         if  ( $this ->query( "INSERT INTO $table ($columnName) VALUES ($value)" )) {
             if  (! empty  ( $url ))
                 $this ->Get_admin_msg( $url , '添加成功!' );
         }
     }
 
     //简化修改update
     public  function  update( $table , $mod_content , $condition , $url  = '' ) {
         //echo "UPDATE $table SET $mod_content WHERE $condition"; exit();
         if  ( $this ->query( "UPDATE $table SET $mod_content WHERE $condition" )) {
             if  (! empty  ( $url ))
                 $this ->Get_admin_msg( $url );
         }
     }
 
     /*取得上一步 INSERT 操作产生的 ID*/
     public  function  insert_id() {
         return  mysql_insert_id();
     }
 
     //指向确定的一条数据记录
     public  function  db_data_seek( $id ) {
         if  ( $id  > 0) {
             $id  = $id  -1;
         }
         if  (!@ mysql_data_seek( $this ->result, $id )) {
             $this ->show_error( "SQL语句有误:" , "指定的数据为空" );
         }
         return  $this ->result;
     }
 
     // 根据select查询结果计算结果集条数
     public  function  db_num_rows() {
         if  ( $this ->result == null) {
             if  ( $this ->show_error) {
                 $this ->show_error( "SQL语句错误" , "暂时为空,没有任何内容!" );
             }
         } else  {
             return  mysql_num_rows( $this ->result);
         }
     }
 
     // 根据insert,update,delete执行结果取得影响行数
     public  function  db_affected_rows() {
         return  mysql_affected_rows();
     }
 
     //输出显示sql语句
     public  function  show_error( $message  = "" , $sql  = "" ) {
         if  (! $sql ) {
             echo  "<font color='red'>"  . $message  . "</font>" ;
             echo  "<br />" ;
         } else  {
             echo  "<fieldset>" ;
             echo  "<legend>错误信息提示:</legend><br />" ;
             echo  "<div style='font-size:14px; clear:both; font-family:Verdana, Arial, Helvetica, sans-serif;'>" ;
             echo  "<div style='height:20px; background:#000000; border:1px #000000 solid'>" ;
             echo  "<font color='white'>错误号:12142</font>" ;
             echo  "</div><br />" ;
             echo  "错误原因:"  . mysql_error() . "<br /><br />" ;
             echo  "<div style='height:20px; background:#FF0000; border:1px #FF0000 solid'>" ;
             echo  "<font color='white'>"  . $message  . "</font>" ;
             echo  "</div>" ;
             echo  "<font color='red'><pre>"  . $sql  . "</pre></font>" ;
             $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  "<br />" ;
             if  ( $this ->is_error) {
                 exit ;
             }
         }
         echo  "</div>" ;
         echo  "</fieldset>" ;
 
         echo  "<br />" ;
     }
 
     //释放结果集
     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  "<br />" ;
         echo  "字段数:"  . $total  = mysql_num_fields( $this ->result);
         echo  "<pre>" ;
         for  ( $i  = 0; $i  < $total ; $i ++) {
             print_r(mysql_fetch_field( $this ->result, $i ));
         }
         echo  "</pre>" ;
         echo  "<br />" ;
     }
 
     //取得 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 );
     }
     function  inject_check( $sql_str ) { //防止注入
         $check  = eregi ( 'select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile' , $sql_str );
         if  ( $check ) {
             echo  "输入非法注入内容!" ;
             exit  ();
         } else  {
             return  $sql_str ;
         }
     }
     function  checkurl() { //检查来路
         if  (preg_replace( "/https?:\/\/([^\:\/]+).*/i" , "\\1" , $_SERVER [ 'HTTP_REFERER' ]) !== preg_replace( "/([^\:]+).*/" , "\\1" , $_SERVER [ 'HTTP_HOST' ])) {
             header( "Location: http://www.dareng.com" );
             exit ();
         }
     }
 
}
?>
分类:  PHP
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值