文件1 ts.php
<?php
class mysql{
private $link_id;
private $query_id;
/*
* 报错函数
* @param string $error 错误信息 
*/
function err($error){
die('对不起,您的操作有误,错误原因为:'.$error);  
}


function __construct($config){
extract($config);  
$this->link_id=mysqli_connect($host,$user,$pass,$db);
            if(!$this->link_id){
$this->err(mysqli_error($this->link_id));
}
}

/*
*  执行sql语句
* @param $sql 查询语句
* @return $query 返回执行成功时的资源 或执行失败 
*/
function query($sql){
$this->query_id=mysqli_query($this->link_id,$sql);
if(!$this->query_id ){
$this->err($sql.'<br>'.mysqli_error($this->link_id));
}else{
return $this->query_id;   //返回的结果在类里可以用
}
}

/*
* 返回全部的查询结果
* @param source $query 由mysql_query($sql)返回的资源
* @return array 返回数组
*/
function findAll($sql){
$query=$this->query($sql);
while($row=mysqli_fetch_array($query,MYSQLI_ASSOC)){
$list[]=$row;
}
return (!empty($list))?$list:'';
}

/*
* 返回单条结果
* @param source $query 由mysql_query($sql)返回的资源
* @return $rs 单条信息数组
*/
function findOne($sql){
$query=$this->query($sql);
$rs=mysqli_fetch_array($query,MYSQL_ASSOC);
return $rs;
}


/*
*  返回指定行的指定字段的值
* @param source $query 由mysql_query($sql)返回的资
* @return array 
*/
               function findResult($sql,$row=0,$field=0){//$row $field 有默认值
    $query=$this->query($sql);
$rs=mysqli_result($query,$row,$field);
return $rs;
}

         /*
*  添加数据
* @param $table 表名
* @param array $arr 关联数组(键为字段 值为字段值)
* @return bool 返回添加操作成功或不成功
*/
function insert($table,$arr){
//得先把$arr数组里的键值对循环出来
foreach($arr as $key=>$value){
//循环出来的 $key 组成一新数组$keyArr
//循环出来的 $value 组成一新数组$valueArr
//去除非法字符
$value=addslashes($value);
$keyArr[] = "".$key."";
//在insert 语句中 值多为字符串 需要加单引号
$valueArr[] = "'".$value."'";
}
//用implode()函数 用,将数组的值连为一个字符串
$keys = implode(',',$keyArr);//print($keys);exit;
$values = implode(',',$valueArr);//print($values);exit;
$sql = "insert into ".$table."(".$keys.") values (".$values.")";//inser into table () values ()
//echo $sql;exit;
$query=$this->query($sql);
//$query?true:false;
if(!$query){
$this->err(mysqli_error($this->link_id));
}else{
return true;
}
}

   /**
   *更新数据库
   *@param string $table 表名
   *@param array $arr 修改数组(包含字段和值的一维数组)
   *@param string $where  条件
   **/
   function update($table,$arr,$where){
   foreach($arr as $key=>$value){
   $value = mysqli_escape_string($this->link_id,$value);
   //echo $value;exit;
   $keyAndValueArr[] = "".$key."='".$value."'";
   }
   $keyAndValue = implode(',',$keyAndValueArr);//echo $keyAndValue;exit;
   $sql="update ".$table." set ".$keyAndValue." where ".$where;//echo $sql;exit;//update table set key = 'value' where $where
   $query=$this->query($sql);
   if(!$query){
$this->err(mysqli_error($this->link_id));
}else{
return true;
}
   }
   
   /**
   * 删除数据
   *@param string $table 表名
   *@param string $where 条件
   */
   function del($table,$where){
   $sql="delete from ".$table." where ".$where;  //delete from table where ?
   $query=$this->query($sql);
   if(!$query){
$this->err(mysqli_error($this->link_id));
}else{
return true;
}
   }
}
?>
文件2ts1.php
<?
include_once("ts.php");
class DB {

    public static $db;

public static function init($dbtype,$config){
    self::$db = new $dbtype($config);  
}

public static function query($sql){
return self::$db->query($sql);  
}

public static function findAll($sql){
    return self::findAll($sql);   
}

public static function findOne($sql){
return self::findOne($sql);  
}


public static function insert($table,$arr){
return self::insert($table,$arr);
}

public static function update($table,$arr,$where){
return self::update($table,$arr,$where);  
               }

public static function del($table,$where){
return self::del($table,$arr,$where);  
}
}
?>
test.php
<?php
include_once("ts1.php");
$config=array(
          'host'=>'127.0.0.1',
  'user'=>'xiao',
  'pass'=>'111111',
  'db'=>'mr_mysql'
);
$db=DB::init('mysql',$config);
$sql="select * from zqlb";
$rs=DB::findAll($sql);
var_dump($rs);
?>

解决方案 »

  1.   

    直接实例化mysql类时一切操作正常  但想试试工厂模式所以写了个DB类 再操作时就提示 Fatal error: Maximum function nesting level of '100' reached  
    哪里有错?????大神赐教!!!!
      

  2.   

    public static function findAll($sql){
        return self::findAll($sql);   
    }
    自己调用自己,这还不是递归吗?
      

  3.   

    你这DB的 CRUD操作全部都是调用自身,不就是递归么。
      

  4.   

    对哟 我的mysql类的方法名和DB类的方法名原来我漏写了$db->
    public static function findAll($sql){
        return self::$db->findAll($sql);   
    }
      

  5.   


    public static function findAll($sql){
        return self::findAll($sql);   
    }
    是递归。