1

アレイの状態に応じて、データベースから著者名を選択しています。しかし、コードを返すと、条件が 2 回繰り返されていることがわかりました。

私のコードはここにあります

$alpha=array('A','B','C','D','E','F');
    $countarray=sizeof($alpha);
    $alert.=$countarray;
    for ($a=0;$a<=$countarray;$a++)
    {
        $selectlist="select * from quotationauthor where Author_name Like'$alpha[$a]%'";
        $result=mysqli_query($con,$selectlist)
                or die(mysqli_error($con));
        $countauthor=countlist($result);
        if($countauthor < 1)
        {

        }
        else
        {
            $alert.="<h1>$alpha[$a]$countauthor</h1><br/>";
            while($row=mysqli_fetch_array($result))
            {
                $alert.=$row[Author_name]."<br/>";
            }
        }
    }
    return $alert;

Aから始まるデータベースで著者名を検索するよりも、最初の条件でAを取得したとします。正しい出力を取得していますが、問題はデータベースの値が2回書き込まれることです

6
A


Albert Einstein
Abraham Lincoln
Abdul Kalam
Adolf Hitler

Albert Einstein
Abraham Lincoln
Abdul Kalam
Adolf Hitler

ご覧のとおり、データベースの値が 2 回書き込まれています。データベースを確認したところ、4 行しかないことがわかりました。

4

1 に答える 1

3

問題はあなたのforループにあります:

for ($a = 0; $a <= $countarray; $a++)

ループ条件は次のとおりです。

$a < $countarray

何が起こるかというと、最後の反復での値$alpha[$a]null(まあ、暗黙のうちに) です。文字列にキャストすると、クエリname LIKE '%'は常に true になります。

データベースに他の文字で始まる行がある場合、または A - F のセットに含まれていない行がある場合は、より明白になります。

于 2013-02-22T09:03:47.040 に答える