2013-10-25 408 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