PHP OOP,MYSQLi 查询

PHP OOP, MYSQLi Query

我为数据库查询创建了一个名为 "Connection" 的 class:

class Connection{
 public $mysqli;

 public function read($query){  
  $result= $this->mysqli->query($query);

  $num_result=$result->num_rows;

  if($num_result>0){
   while($rows=$result->fetch_assoc()){

    $this->data[]=$rows;
  }          
   return $this->data;
  }
 }
}

我是这样称呼我的 class:

$obj=new Connection("localhost","root","","testpaginate");

$query="SELECT * FROM paginate";
$result=$obj->read($query);
mysqli_free_result($result);

$queries="SELECT * FROM paginate where id=1";
$results=$obj->read($queries);
print_r($results);
?>

当我执行

$query="SELECT * FROM paginate";
$result=$obj->read($query);

显示正确答案。

当我再次执行

$queries="SELECT * FROM paginate where id=1";
$results=$obj->read($queries);

它显示当前结果与之前的结果

为什么会这样?非常感谢任何帮助。

我认为你不应该在 $this->data 之后使用 []。这意味着它将向数组添加行。

问题是您每次调用 read 时都会附加到 $this->data。您需要在方法中重新初始化数组 $this->data

if($num_result>0){
    $this->data = array();
    while($rows=$result->fetch_assoc()){
        $this->data[]=$rows;
    }
}

在 类 中正确声明变量是一个好习惯。

每次使用它们时都应该这样做(如果不用于其他目的):

class Foo {
    private $data;

    public function read()
    {
        $this->data = array();

        //do your stuff here, i.e. in your loop
        while(...)
           $this->data[] = $row;

        return $this->data;
    }
}

也有可能您不想关联私有变量:

class Foo {

    public function read()
    {
        $data = array();

        //do your stuff here, i.e. in your loop
        while(...)
           $data[] = $row;

        return $data;
    }
}

现在$data只是一个局部变量。