Использование массива в запросе php? - PullRequest
1 голос
/ 14 июля 2011

Я хочу получить количество строк в запросе, используя 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 ]

3 голосов
/ 14 июля 2011

используйте { } в интерполяции или concat:

Это:

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

1 голос
/ 14 июля 2011

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

$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"];
1 голос
/ 14 июля 2011

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

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

 SELECT * ... AND ipk='';

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

...