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" でも $Porter に "Not Present" が返されます。ここで何が間違っていますか?

これも機能しません:

$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

この線

$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

データベースの最初の行のみを取得します。

すべての行をチェックして、それらのいずれかが Porter であるかどうかを確認する場合は、フラグをデフォルトの「いいえ」に設定し、結果をループして、見つかった場合はフラグを設定する必要があります。

$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 に答える