Использование массива в PHP-запросе?

Я хочу получить количество строк в запросе, используя mysql_num_rows.The сам запрос содержит 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 массива.. код не работает (все элементы в массиве antecedent содержат 0). Как это сделать? неужели нельзя использовать 2 массива в запросе? Спасибо

3 ответа

Решение

Если вы не получите ошибку 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() заявление. Это позволит выполнить ваш запрос, даже если значения имеют только ОДИН из ваших массивов. Вам нужно изменить его на && (и) сравнение вместо этого, которое требует, чтобы ВСЕ массивы имели доступные значения.

Например, если $gpa[$i] бывает пустым, то ваш запрос становится

 SELECT * ... AND ipk='';

что, вероятно, не то, что вы хотите.

Использование { } в интерполяции или конкат:

Это:

"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-инъекцию, для которой этот запрос может быть уязвим. А готовые запросы дадут вам гораздо лучшую производительность, особенно в цикле, как у вас здесь.

Если вы просто хотите считать (количество строк), вы должны сделать это так...

$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"];
Другие вопросы по тегам