在php查询中使用数组



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

使用{ }在插值或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注入的攻击。而准备好的查询会给你更好的性能,尤其是在像这里这样的循环中。

如果您在查询运行时没有得到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()语句中执行||(或)操作。这将使您的查询继续进行,即使只有一个数组有值。您需要将其更改为&& (and)比较,这要求所有数组都有可用的值。

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

 SELECT * ... AND ipk='';

可能不是你想要的

如果你只想要count(行数),你应该这样做…

$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"];

相关内容

  • 没有找到相关文章

最新更新