2011-07-14 70 views
1

我想獲得使用mysql_num_rows查詢中的行數。查詢本身包含2個數組。我想存儲數組中的數字。這裏是我的代碼在php查詢中使用數組?

$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

+0

這可能是'$期[$ i]'和'$ GPA [$ i]'從不爲相同的「$ i」設置。然後你會創建一個查詢,它不會返回任何東西... –

+0

那麼,我該如何解決它?都具有與前一個過程相同的元素數目。 – aTFa

+0

如果你想要算你做錯了。您可能希望使用'empty'而不是'isset' ... –

回答

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有數值,這也可以讓您的查詢繼續進行。您需要將其更改爲&&(和)比較,而這需要所有陣列具有可用的值。

例如,如果$gpa[$i]恰好是空的,那麼你的查詢變得

SELECT * ... AND ipk=''; 

這可能不是你想要的。

+0

我把它改成了&&但它仍然不起作用,你認爲這是因爲我在查詢中放了2個數組嗎? – aTFa

+0

你可以在查詢中放入一百萬個數組,並且PHP會做你告訴它的東西。這一切都歸結於構建它後查詢字符串的外觀。垃圾進垃圾出。使用我的第一個構造(單獨的$ sql變量)並查看你正在構建的東西。 –

+0

謝謝,已解決!你是對的,這不是陣列。我嘗試了你的建議,我發現數組gpa =''。這只是因爲我輸入的數組名稱錯誤。非常感謝:) – aTFa

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注入。準備好的查詢會爲您提供更好的性能,尤其是像您這樣的循環。

+0

如果您不使用PDO,則應該清理這些變量以防止SQL注入。 – Jim

+0

我已經嘗試過使用括號和第二種方法。但是,我仍然無法在$ antecedent數組中獲得任何值。也許我不能把2個數組放在查詢中:( – aTFa

+0

如果計數爲0,這很可能就是你的查詢返回的結果 – Cfreak

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"]; 
+0

在phpmyadmin中工作,但當在查詢中使用兩個數組應用於php時不起作用。我認爲兩個數組不能放在查詢中。你是這麼認爲的嗎? – aTFa