繁体   English   中英

PHP OOP,MYSQLi查询

[英]PHP OOP, MYSQLi Query

我为数据库查询创建了一个名为“ 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);

它显示当前结果与先前结果

为什么这样? 任何帮助深表感谢。

问题是,每次调用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只是一个局部变量。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM