1

mysql_num_rows を使用してクエリの行数を取得したい.クエリ自体には2つの配列が含まれています. 数値を配列に格納したい。これが私のコードです

  $antecedent=array();

for($i=0;$i<=$index;$i++){
    if(isset($period[$i])|| isset($gpa[$i]) || isset($antecedent[$i])){
  $queryAntecedent=mysql_query("SELECT * FROM mytable WHERE  study_period='$period[$i]' AND ipk='$gpa[$i]'") or die (mysql_error());    

        $antecedent[$i]=mysql_num_rows($queryAntecedent);
        }//endif
}//endfor

print_r ($antecedent);

クエリ内で1つの配列のみを使用した場合、コードは機能します。一方、2 つの配列を入れると、コードが機能しません (配列前件のすべての要素に 0 が含まれます)。これを解決する方法は?クエリで2つの配列を使用する方法はありませんか? ありがとうございました

4

3 に答える 3

3

{ }補間または連結で使用:

これ:

"SELECT * FROM mytable WHERE  study_period='{$period[$i]}' AND ipk='{$gpa[$i]}'"

またはこれ:

"SELECT * FROM mytable WHERE  study_period='" . $period[$i] . "' AND ipk='" . $gpa[$i]} . "'"

さらに良い解決策は、プレースホルダーと準備されたクエリを使用できるようにするPDOまたは類似のものを使用することです。プレースホルダーは、このクエリが脆弱になる可能性のある SQL インジェクションを防ぐのに役立ちます。また、準備されたクエリを使用すると、特にここにあるようなループでパフォーマンスが大幅に向上します。

于 2011-07-14T15:08:00.930 に答える
1

クエリの実行時にmysqlエラーが発生しない場合、クエリは単に行を返していません。クエリを個別に作成して変数に保存してみてください。作成したものを表示できます。

$sql = "SELECT * FROM mytable WHERE  study_period='$period[$i]' AND ipk='$gpa[$i]'";
$queryAntecedent=mysql_query($sql) or die (mysql_error());
echo $sql;

メインステートメント||で(または)を実行していることに注意してください。これにより、配列if()の1つだけに値がある場合でも、クエリを続行できます。代わりに、それを(および)比較に変更する必要があります。これには、すべての配列に使用可能な値がある必要があります。&&

たとえば、$gpa[$i]たまたま空の場合、クエリは次のようになります。

 SELECT * ... AND ipk='';

これはおそらくあなたが望むものではありません。

于 2011-07-14T15:15:01.683 に答える
1

カウント(行数)だけが必要な場合は、次のようにする必要があります...

$sql = mysql_query("SELECT COUNT(*) AS count FROM mytable WHERE study_period = '$period[$i]' AND ipk= '$gpa[$i]'") or die (mysql_error());    
$sql = mysql_fetch_assoc($sql);
$antecedent[$i]= $sql["count"];
于 2011-07-14T15:15:35.117 に答える