php while循环不适用于用户定义的函数

php while循环不适用于用户定义的函数,php,Php,这样,while循环工作正常: $results = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id); while($data = mysqli_fetch_array($results)) { echo '<tr> <td>' . $data['name'] . '</td> <td>'

这样,
while
循环工作正常:

$results = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id);

while($data = mysqli_fetch_array($results)) {
    echo '<tr>
        <td>' . $data['name'] . '</td>
        <td>' . $data['date'] . '</td>
        </tr>'
}
$results=mysqli\u查询($dbcon,“从`table1`中选择`name`,`date`,其中`user`=$user\u id);
而($data=mysqli\u fetch\u数组($results)){
回声'
“.$data['name']”
“.$data['date']”
'
}
但是,它不希望使用用户定义的函数。它只是无限循环第一行:

function camp_data() {
    global $user_id;
    $query = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id");
    return (mysqli_fetch_array($query));
}

while($data = camp_data()) {
    echo '<tr>
        <td>' . $data['name'] . '</td>
        <td>' . $data['date'] . '</td>
        </tr>'
}
函数camp_data(){
全局$user\u id;
$query=mysqli\u query($dbcon,“从`table1`中选择`name`,`date`,其中`user`=$user\u id”);
返回(mysqli_fetch_数组($query));
}
而($data=camp_data()){
回声'
“.$data['name']”
“.$data['date']”
'
}
当我执行
print_r(mysqli_fetch_array($results))
print_r(camp_data())
时,两者都返回完全相同的数组。
这里出了什么问题?

在每次交互中,您调用camp_data()中的所有代码,而不仅仅是最后一行,所以重构它:

function camp_data($query) {
    return (mysqli_fetch_array($query));
}

//execute query only once
$query = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id");

//fetch result row by row
while($data = camp_data($query)) {
    echo '<tr>
        <td>' . $data['name'] . '</td>
        <td>' . $data['date'] . '</td>
        </tr>'
}
函数camp\u数据($query){
返回(mysqli_fetch_数组($query));
}
//只执行一次查询
$query=mysqli\u query($dbcon,“从`table1`中选择`name`,`date`,其中`user`=$user\u id”);
//逐行获取结果
while($data=camp_data($query)){
回声'
“.$data['name']”
“.$data['date']”
'
}

正如您所看到的,本例中的方法camp_data是mysqli_fetch_数组的唯一简单包装器,因此在调用camp_data()中的所有代码的每个交互中,它都可以被mysqli_fetch_数组替换,而不仅仅是最后一行,所以重构它:

function camp_data($query) {
    return (mysqli_fetch_array($query));
}

//execute query only once
$query = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id");

//fetch result row by row
while($data = camp_data($query)) {
    echo '<tr>
        <td>' . $data['name'] . '</td>
        <td>' . $data['date'] . '</td>
        </tr>'
}
函数camp\u数据($query){
返回(mysqli_fetch_数组($query));
}
//只执行一次查询
$query=mysqli\u query($dbcon,“从`table1`中选择`name`,`date`,其中`user`=$user\u id”);
//逐行获取结果
while($data=camp_data($query)){
回声'
“.$data['name']”
“.$data['date']”
'
}

正如您所看到的,本例中的方法camp_data只是mysqli_fetch_数组的简单包装器,因此可以用mysqli_fetch_数组替换它

无论您在外部调用函数多少次,它都只会在第一行执行
mysqli_fetch_array()
。第二次调用函数(在外部循环的第二次迭代中)将不知道它以前执行过,也不会继续到下一行。此外,在数组上使用while循环不是您可以选择的最佳选择,它可能会导致无限循环

你必须循环函数中的结果并构建一个数组。返回mysqli_fetch_数组不是循环

while($data = mysqli_fetch_array($results)) {
    $rows[] = $data;
}
return $rows
然后对函数执行
foreach()

foreach (camp_data() as $data) {
   echo '<tr>
    <td>' . $data['name'] . '</td>
    <td>' . $data['date'] . '</td>
    </tr>'
}
foreach(camp_data()作为$data){
回声'
“.$data['name']”
“.$data['date']”
'
}

无论您在外部调用函数多少次,它都将只在第一行执行
mysqli\u fetch\u array()
。第二次调用函数(在外部循环的第二次迭代中)将不知道它以前执行过,也不会继续到下一行。此外,在数组上使用while循环不是最佳选择,它可能会导致无限循环

你必须循环函数中的结果并构建一个数组。返回mysqli_fetch_数组不是循环

while($data = mysqli_fetch_array($results)) {
    $rows[] = $data;
}
return $rows
然后对函数执行
foreach()

foreach (camp_data() as $data) {
   echo '<tr>
    <td>' . $data['name'] . '</td>
    <td>' . $data['date'] . '</td>
    </tr>'
}
foreach(camp_data()作为$data){
回声'
“.$data['name']”
“.$data['date']”
'
}

Syntax higligher显示一些语法错误!!检查$dbcon是否在函数中可用!!Syntax higligher显示一些语法错误!!检查$dbcon是否在函数中可用!!