2013-10-25 257 views
0

我正在嘗試使用PDO連接在我的SQL記錄中查找最小值。記錄是varchar,所以必須將其轉換爲int才能找到最小值。我被困在這個問題上:PHP SQL:使用PDO查找最小值

mysql_fetch_assoc() expects parameter 1 to be resource, array given 

問題是我不知道如何從PDO連接獲取資源。該查詢是有效的。

<?php 

//load and connect 
require("config.inc.php"); 

     //change varcar to ints and put into array 
     $query = "SELECT score FROM easy"; 
     $stmt = $db->prepare($query); 
     $result = $stmt->execute(); 
     $rows = $stmt->fetchAll(); 
     $scoreArray = array(); 

     $index = 0; 
      while($row = mysql_fetch_assoc($rows)){ 
      $scoreArray[$index] = intval($row); 
      $index++; 
     } 
     $smallest = min($scoreArray); 

     $response["success"] = 0; 
     $response["message"] = "The min is: ".$smallest; 
     echo(json_encode($response)); 

?> 
+0

您需要使用不PDO但** ** SQL。因爲它正是SQL正好爲 –

+0

** mysql_fetch_assoc **與舊的折舊** mysql **函數有關。它與** PDO **無關。 – Subin

回答

2
  1. 您需要將字段轉換爲int。
  2. 通過SQL的方式找到最小值:

    SELECT min(score) FROM easy 
    

雖然從數據庫中選擇PHP所有的記錄和處理它們是不是要走的路。這違背了最基本的原則。數據挖掘是數據庫的一項工作。

$query = "SELECT min(score) FROM easy"; 
    $stmt = $db->prepare($query); 
    $result = $stmt->execute(); 
    $min = $stmt->fetchColumn(); 
+0

我無法將字段更改爲int,因爲我從Android請求發佈得分,並且只會允許我發佈varchar – Shane

+1

噢,您當然可以。 Android與此無關 –

+0

我可以將數據作爲int發佈嗎?我從另一個答案閱讀,你只能發佈變種 – Shane

-1

使用PDO時,不要使用mysql_fetch_assoc

更換

while($row = mysql_fetch_assoc($rows)){ 

foreach ($rows as $row){ 
+0

對不起,我爲什麼被標記?我的回答可以解決問題中所顯示的錯誤,儘管它不會回答標題(反正經常會有誤導)。 Quote:「問題是我不知道如何從PDO連接獲取資源。」 – zamnuts