【发布时间】: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。