为什么这个函数会返回一个无限循环?我试图创建一个函数,你只需要给它查询,而while循环负责其余的。但由于某些原因,只有当我有函数返回$ q-> fetch_assoc()时,它才会进入无限循环。如果我只返回$ q,那么在while循环中调用$ q-> fetch_assoc()然后它不会导致无限循环。
public function fetch($query){
$con = $this->con;
$q = $con->query($query);
return $q->fetch_assoc();
}
while($r = $sqli->fetch("SELECT id FROM users LIMIT 5")){
echo $r['id']."<br />";
}
也尝试了
public function fetch($query){
$con = $this->con;
$q = $con->query($query);
return $q->fetch_assoc();
}
$x = $sqli->fetch("SELECT id FROM users LIMIT 5");
while($r = $x){
echo $r['id']."<br />";
}
我想也许每次都在重新创建一个新的获取功能。这也没有用,导致无限循环。
答案 0 :(得分:2)
每次调用该函数时,您都会重新运行查询,这会将数据集重置为第一条记录。
e.g。您有5条返回的记录:
function get() {
.... run query
return 1st record
}
您从不获取记录2,3,4,5,因为您一直将查询重置为开头。
你的函数应该返回结果HANDLE:
function do_query($sql) {
$result = $con->query($sql);
return $result;
}
while($row = $result->fetchRow()) {
...
}
答案 1 :(得分:1)
fetch
函数有问题,当调用此函数重置查询(重新初始化查询)并且只获取第一行而不指示下一行。你有两种方法第一种方法是使用query
函数然后使用在while循环中获取函数。
public function query($sql){
$con = $this->con;
return $con->query($sql); // as result
}
public function fetch($result){
return $result->fetch_assoc();
}
$query_r=this->query("SELECT id FROM users LIMIT 5"); // as result
while($r = $this->fetch($query_r)){
echo $r['id']."<br />";
}
第二种方式更智能,使用key/value
查询缓存进行保存查询(避免重置/重新启动查询),这样更接近prototype
public $query_cache=array();
private function query($sql){
$con = $this->con;
return $con->query($sql); // as result
}
public function fetch($sql){
$cache_item=@$this->query_cache[$sql];
if(!$cache_item) { $cache_item=$this->query($sql);$this->query_cache[$sql]=$cache_item; }
$row=$cache_item->fetch_assoc();
if(!$row) unset($this->query_cache[$sql]);
return $row;
}
while($r = $this->fetch("SELECT id FROM users LIMIT 5")){
echo $r['id']."<br />";
}