在php查询中使用数组?

时间:2011-07-14 15:03:41

标签: php arrays mysql-num-rows

我想使用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个数组? 谢谢

3 个答案:

答案 0 :(得分:3)

在插值或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 :(得分: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()(或)。即使只有 ONE 的数组具有值,这也会让您的查询继续进行。您需要将其更改为&&(和)比较,这需要 ALL 数组的值可用。

例如,如果$gpa[$i]恰好为空,那么您的查询将变为

 SELECT * ... AND ipk='';

这可能不是你想要的。

答案 2 :(得分: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"];