0

我要做的是根据 sql 查询分配变量。“县”字段是一个包含县名称的 varchar。

 $sql="SELECT County from GAINLP WHERE SpeciesName LIKE '%Actias_luna%'";
    ($result=mysqli_query($connect,$sql));
    $row=mysqli_fetch_array($result,MYSQLI_ASSOC);

    if (in_array("Porter", $row))  {
                $Porter='Present';
                    }
                else {$Porter='Not Present';
                     };
    echo $Porter;

发生的情况是 in_array 仅检测数组中的第一个县。如果我回显 $row,我会得到:

欧文派克帕克欧文欧文斯科特摩根格林亨德里克斯劳伦斯圣约瑟夫华盛顿维戈摩根欧文杜布瓦杰斐逊瑞士麦迪逊格林费耶特马里昂奥兰治帕克克拉克杰斐逊费耶特喷泉蒙哥马利亨德里克斯霍华德欧文埃尔克哈特马里昂亨德里克斯华盛顿蒂皮卡诺普特南华盛顿布朗亨德里克斯詹宁斯维恩德瑞克利

如果我将针指定为“Owen”,则 echo $Porter 返回“Present”。所有其他值都回显“不存在”。如果我循环它,即使“Owen”也会将“Not Present”返回给 $Porter。我在这里做错了什么?

这也不起作用:

$sql="SELECT County from GAINLP WHERE SpeciesName LIKE '%Actias_luna%'";
    ($result=mysqli_query($connect,$sql));
    while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {

    if (in_array("Porter", $row))  {
                $Porter='Found it';
                    }
                else {$Porter='Didn\'t Find it';
                }};
    echo $Porter;
4

2 回答 2

0

mysqli_fetch_array 只获取一行。使用 while 循环遍历所有行:

while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {

如果您不想检查每行但想检查任何行中是否存在该值,请使用mysqli_fetch_all

$sql="SELECT County from GAINLP WHERE SpeciesName LIKE '%Actias_luna%'";
$result=mysqli_query($connect,$sql);
$rows=mysqli_fetch_all($result,MYSQLI_ASSOC);
if (in_array("Porter", $rows))  {
    $Porter='Present';
} else {
    $Porter='Not Present';
};
echo $Porter;
于 2019-01-23T21:18:46.970 回答
0

线

$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

只会检索数据库的第一行。

如果您想检查每一行以查看其中是否有任何一个是 Porter,那么您需要将标志设置为默认值“no”,循环您的结果,并在找到时设置标志:

$Porter="Not Present";
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)){
    if($row['County'] == "Porter"){
        $Porter = "Present";
    }
}

echo $Porter;

(这只是一个基本示例;例如,您可以通过在第一次找到结果时跳出循环来进一步优化它,但这将完成这项工作)

于 2019-01-23T21:22:19.393 回答