[英]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.