【问题标题】:Capture multi-line result with mysql_fetch_array() function使用 mysql_fetch_array() 函数捕获多行结果
【发布时间】:2013-09-06 16:30:16
【问题描述】:

我有一个 php 函数,它从 mySQL 数据库中捕获一个地点的坐标并返回结果:

public function getCoordinatesByName($name) {
        $result = mysql_query("SELECT * FROM places WHERE name = '$name'") or die(mysql_error());
        // check for result 
        $no_of_rows = mysql_num_rows($result);
        if ($no_of_rows > 0) {
            $result = mysql_fetch_array($result);
            return $result;
        } else {
            // user not found
            return false;
        }
    } 

该函数在 index.php 中用于捕获结果并通过 JSON 发送到 Android 设备:

$place = $db->getCoordinatesByName($name);
if ($place != false) {
    // user found
    // echo json with success = 1

    $response["success"] = 1;
    $response["place"]["H"] = $place["H"];
    $response["place"]["V"] = $place["V"];
    $response["place"]["placeid"] = $place["placeid"];
    $response["place"]["name"] = $place["name"];
    $response["place"]["type"] = $place["type"];
    $response["place"]["note"] = $place["note"];
    $response["place"]["discription"] = $place["discription"];
    //$response["place"]["created_at"] = $user["created_at"];
    //$response["place"]["updated_at"] = $user["updated_at"];
    echo json_encode($response);
}

现在我想一次发送所有地点的所有坐标,我创建了一个名为 getCoordinates 的函数:

 public function getCoordinates($name) {
        $result = mysql_query("SELECT * FROM places") or die(mysql_error());
        // check for result 
        $no_of_rows = mysql_num_rows($result);
        if ($no_of_rows > 0) {
            $result = mysql_fetch_array($result);
            return $result;
        } else {
            // user not found
            return false;
        }
    }

然后我以这种方式在 index.php 中使用它:

 $place = $db->getCoordinates($name);
 if ($place != false) {
     for ($i = 1;$i = count($place); $i++ ) {
         // user found
         // echo json with success = 1
         $response[$i]["success"] = 1;
         $response[$i]["place"]["H"] = $place[$i]["H"];
         $response[$i]["place"]["V"] = $place[$i]["V"];
         $response[$i]["place"]["placeid"] = $place[$i]["placeid"];
         $response[$i]["place"]["name"] = $place[$i]["name"];
         $response[$i]["place"]["type"] = $place[$i]["type"];
         $response[$i]["place"]["note"] = $place[$i]["note"];
         //$response["place"]["created_at"] = $user["created_at"];
         //$response["place"]["updated_at"] = $user["updated_at"];
     }
     echo json_encode($response);
 } 

我认为有些地方不对劲,因为我从 Android 设备运行应用程序时总是出错

【问题讨论】:

  • 请,在您编写任何更多 SQL 接口代码之前,您必须阅读 proper SQL escaping 以避免严重的 SQL injection bugs。此外,mysql_query 不应在新应用程序中使用。这是一个已弃用的接口,已从 PHP 的未来版本中删除。像PDO is not hard to learn 这样的现代替代品,将使您的数据库代码更容易正确。
  • 感谢朋友的建议

标签: php android mysql sql json


【解决方案1】:

mysql_fetch_array()(及其表亲_assoc_object)返回单个ROW 数据。他们不会获取整个查询结果。您需要构建一个行数组,然后返回:

$data = array();
while($row = mysql_fetch_array($result)) {
   $data[] = $row;
}
return $data;

然后您将获得可以迭代的数组。

【讨论】:

    猜你喜欢
    • 2015-02-20
    • 2014-01-02
    • 2011-11-10
    • 2013-12-08
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多