Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么mysqli fetch在函数中创建无限循环?_Php_Function_Mysqli - Fatal编程技术网

Php 为什么mysqli fetch在函数中创建无限循环?

Php 为什么mysqli fetch在函数中创建无限循环?,php,function,mysqli,Php,Function,Mysqli,为什么这个函数返回一个无限循环?我试图创建一个函数,您只需给它一个查询,while循环就可以处理其余的部分。但由于某种原因,只有当我让函数return$q->fetch_assoc()返回时,它才会进入无限循环。如果我只返回$q,然后在while循环中调用$q->fetch_assoc(),那么它不会导致无限循环 public function fetch($query){ $con = $this->con; $q = $con->query($query);

为什么这个函数返回一个无限循环?我试图创建一个函数,您只需给它一个查询,while循环就可以处理其余的部分。但由于某种原因,只有当我让函数return$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 />";
}
公共函数获取($query){
$con=$this->con;
$q=$con->query($query);
返回$q->fetch_assoc();
}
而($r=$sqli->fetch(“从用户限制5中选择id”)){
echo$r['id']。“
”; }
也试过

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 />";
}
公共函数获取($query){
$con=$this->con;
$q=$con->query($query);
返回$q->fetch_assoc();
}
$x=$sqli->fetch(“从用户限制5中选择id”);
而($r=$x){
echo$r['id']。“
”; }

我想它可能每次都在重新创建一个新的fetch函数。这也不起作用,并导致无限循环。

每次调用函数时,都会重新运行查询,从而将数据集重置为第一条记录

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 />";
}
e、 g.您有5条返回的记录:

function get() {
    .... run query
    return 1st record
}
您将永远不会获取记录2、3、4、5,因为您一直在将查询重置为开始

您的函数应该返回结果句柄:

function do_query($sql) {
    $result = $con->query($sql);
    return $result;
}

while($row = $result->fetchRow()) {
   ...
}

fetch
函数出现问题,当调用此函数重置查询(重新初始化查询)并仅获取第一行而不指示下一行时。您有两种方法,第一种方法是使用
query
函数,然后在while循环中使用fetch函数

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 />";
}

return$q->fetch_assoc()
只返回1行,并且不受
限制5的影响,因此您的函数
fetch()
总是返回
true
,因此
while($r=$sqli->fetch(…)
while($r=$x)
无限运行。应该解决什么问题?我需要能够为函数提供查询,并且只需要循环它。但是当函数设置为while循环之外的变量时,它不应该工作吗?是的,但是第二个代码段中的循环也是错误的。你只需要不断地把$x赋值给$r,只要$x有一个值,这种情况就会继续下去。怎么会这样呢?fetch_assoc()被分配给变量,因此只运行一次。哪里出错了?您的第二个函数执行
$x=get\u first\u record()
,然后继续在$x上循环,这将始终是正确的。除了
fetchAll()
,fetch()类型函数只从结果集中返回一条记录。谢谢。我不知道fetch只返回了一条记录。