我想使用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个数组? 谢谢
答案 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"];