我为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->数据之后使用[]。这意味着它将向数组中添加行。