Использование массива в 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"];