繁体   English   中英

PHP-执行选择查询并遍历结果

[英]PHP - Execute select query and loop through results

我正在使用PHP开发Web服务。 我在执行选择查询时遇到了一些麻烦。 这是我正在使用的代码。

DB_Functions.php

public function getCompanies() {

    $result = mysql_query("SELECT * FROM company");
    // check for successful store

    if ($result) {
        return mysql_fetch_array($result,true);
    } else {
        return false;
    }
}

GetCompanies.php

<?php

require_once 'include/DB_Functions.php';
$db = new DB_Functions();

$companies = array();
//$rows = $db->getCompanies();

while ($row = $db->getCompanies()) {
    echo $row['companyName'];
    $rowArr = array();
    $rowArr['CompanyName'] = $row['companyName'];
    $rowArr['CompanyID'] = $row['companyId'];
    //array_push($companies, $rowArr);
    $companies[] = $rowArr;
}
header('Content-Type: application/json');
$response=array("Companies"=>$companies);
$json = json_encode($response);
echo $json
?>

但是问题出在GetCompanies.php文件中,而while循环无休止地运行着。 代码似乎正常。 任何帮助,将不胜感激。

当您执行while ($row = $db->getCompanies()) {您将重新运行整个查询,并每次返回第一行。 mysql_fetch_array返回一行

您需要做的是让getCompanies()遍历所有行并返回一个数组。

public function getCompanies() {    
    $result = mysql_query("SELECT * FROM company");
    // check for successful store

    if ($result) {
        $ret = array();

        while($row = mysql_fetch_assoc($result)){
            $ret[] = $row;
        }

        return $ret;
    } else {
        return false;
    }
}

现在, getCompanies()将返回一个数组,您可以将其foreach

$rows = $db->getCompanies();
foreach($rows as $row){
    // ...
}

将while循环声明更改为类似

foreach($rows as $row) {}

正如Pavlin所说,将函数调用移到循环外的getCompanies()上。

此外,如何修改查询以从数据库中选择一组特定的字段并直接将它们作为响应发送而无需进行任何其他处理,该如何做?

由于您正在实现没有任何条件(where子句)的Select查询。 而且由于company表中有数据,因此它将始终在while循环中返回true,这使while循环成为无限循环。 为了使正常工作,条件应变为假,以退出循环。 它不是编程缺陷,而是合乎逻辑的。

php文档具有您需要的所有信息。 您使用的是错误的函数:

mysqli_fetch_array —获取结果行作为关联数组,数字数组或两者兼有

mysqli_fetch_all —获取所有结果行为关联数组,数字数组或两者兼有

只需更改您的return语句即可return mysqli_fetch_all($result); return mysqli_fetch_all($result, MYSQLI_ASSOC); 得到一个关联数组。

当然,您需要将getCompanies调用移出循环。

注意自版本5.5。*起,不再使用php mysql_*函数,并将很快从该语言中删除该函数。 您应该查看mysqli_*PDO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM