我想使用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"];