1

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

4

3 回答 3

3

{ }在插值或连接中使用:

这:

"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 注入。准备好的查询将为您提供更好的性能,尤其是在像这里这样的循环中。

于 2011-07-14T15:08:00.930 回答
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()这也会让您的查询继续进行。您需要将其更改为(和)比较,这要求所有数组都有可用的值。&&

例如,如果$gpa[$i]碰巧是空的,那么您的查询将变为

 SELECT * ... AND ipk='';

这可能不是你想要的。

于 2011-07-14T15:15:01.683 回答
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"];
于 2011-07-14T15:15:35.117 回答