【问题标题】:How do I loop through a received array in PHP and query the database to return a new array?如何在 PHP 中遍历接收到的数组并查询数据库以返回新数组?
【发布时间】:2013-07-04 17:10:09
【问题描述】:

我在 php 中有这段代码:

<?php

include_once("JSON.php");
$json = new Services_JSON();

//1. PROCESS RECEIVED ARRAY

$handle = fopen("php://input", "rb");
$http_raw_post_data = '';
while (!feof($handle)) {
    $http_raw_post_data .= fread($handle, 8192);
}
fclose($handle);

//just decode to see what kind of object it is
$post_data = json_decode($http_raw_post_data,true);

if (is_array($post_data))
    $response = array("status" => "ok", "code" => 0, "original request" => $post_data);
else
    $response = array("status" => "error", "code" => -1, "original_request" => $post_data);


//CALL DB QUERY

$link = mysql_pconnect("localhost", "user", "pass") or die("Could not connect");
mysql_select_db("mydb") or die("Could not select database");


//CREATE FINAL ARRAY TO RETURN
$arrayToReturn = array();


//----------------------THIS FAILS, POSSIBLY DUE TO WHEN IT RETURNS

foreach ($post_data as $value) 
{
  //CREATE QUERY
  $result = mysql_query("SELECT username, SUM(points) AS PUNTOS FROM tags WHERE username='$value' GROUP BY username");

  echo "executing query...";

  //EXECUTE QUERY & ADD EACH USER/POINTS DICTIONARY TO $resultado ARRAY
  $resultado = array();
  while($obj = mysql_fetch_object($result)) 
  {
    $resultado[] = $obj;
  }

  //STORE RESULTS IN NEW OBJECT TO RETURN
  $arrayToReturn[] = $resultado;

}

?>

我刚刚编辑了我原来的问题,现在我得到了我的数组...由我的 iOS 应用程序记录的来自服务器响应的响应字符串是:

正在执行查询...数组 执行查询...数组 [[{"username":"xcodeSim","PUNTOS":"5"}],[{"username":"dannyrodri","PUNTOS":"5"}]]

不确定 Array 一词的来源,但我得到了一个包含两个数组的数组。我想我只需要调整它以使其成为一个只有 2 个字典的数组。如何将此编码回我的 iOS 应用程序?

【问题讨论】:

  • 你的预期结果是什么,你会得到什么结果
  • 查询不应该使用$value,而不是$_POST['userNa']吗?
  • 当您在字符串中插入数组引用时,您必须省略引号。你应该得到一个语法错误,不是吗?
  • 创建$response 然后创建并回显$processed 的代码在这里可能无效。这在您从中获取此代码的示例中使用,但在这里可能不相关。响应的创建可能应该是 SQL 命令成功或失败的结果,而不仅仅是请求是否是格式正确的 JSON 请求。
  • 我还建议在您的 SQL 中使用 mysql_real_escape_string 来保护自己免受 SQL 注入攻击。正如 Barmar 指出的那样,您大概应该使用 $value

标签: php database for-loop


【解决方案1】:

$result 中的查询会因为引号而失败试试这个:

$result = mysql_query("SELECT username, SUM(points) AS PUNTOS FROM tags WHERE username='".$_POST["userNa"]."' GROUP BY username");

【讨论】:

    【解决方案2】:

    试试这个:

    $array_to_return = array();
    if ($post_data) {
      $usernames = implode(',', array_map(function($u) {
        return "'" + mysql_real_escape_string($u) + "'";
      }));
      $result = mysql_query("SELECT username, SUM(points) AS PUNTOS FROM tags WHERE username IN ($usernames) GROUP BY username") or die (mysql_error());
      while ($obj = mysql_fetch_object($result)) {
        array_to_return[] = $obj;
      }
    }
    echo json_encode($array_to_return);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 2022-11-14
      • 1970-01-01
      相关资源
      最近更新 更多