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
只是一个局部变量。
我为数据库查询创建了一个名为 "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
只是一个局部变量。