PHP OOP, MYSQLi Query


PHP OOP, MYSQLi Query

我为DB查询创建了一个名为"Connection"的类:

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;
  }
 }
}

这就是我如何称呼我的班级:

$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);

它显示当前结果和以前的结果

为什么会这样?非常感谢您的帮助。

在类中声明变量是正确的做法。

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

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只是一个局部变量。

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

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

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