-1

我正在尝试将静态数据与 json 编码数组数据合并以进行输出。这是我的php代码:

$arr = array();

$rs = mysql_query("SELECT id, name, picture, mail, gender, birthday FROM users WHERE id='$logged_id' ");

while($obj = mysql_fetch_object($rs)) {
   $arr[] = $obj;
}

echo '{"users":'.json_encode($arr).'}';

现在我想将其他数据与它合并:

$user_ip = array("user_ip" => $user_ip_address);

我试过 array_merge($arr, $user_ip)。但它没有用。如果我与现有数据数组合并,我认为这不是正确的 json 数组格式。请让我知道如何使用 json 编码输出其他数据以及来自 mysql 的当前数据。

我用我现有的代码得到这样的输出,这是正确的:

{"users":[{"id":"14","name":"Sonu Roy","picture":"image012.jpg","mail":"myemail@gmail.com","gender": "男","生日":"1983-01-11"}]}

但现在我想添加其他变量,例如 $user_ip_address 作为用户数据加入当前输出数据,如下所示:

{"users":[{"id":"14","name":"Sonu Roy","picture":"image012.jpg","mail":"myemail@gmail.com","gender": "男","生日":"1983-01-11",user_ip:"127.0.0.1"}]}。

我想以这种方式得到它。怎么做?请告诉我。提前致谢。

4

2 回答 2

0

mysql_fetch_object返回一个对象,而不是数组。所以,你在做什么$arr[] = $obj;只是将一个对象添加到一个数组中。所以,实际的结构$arr是这样的

$arr => [
    [0] => Object(....),
    [1] => Object(....),
    ....
]

在您的特定情况下,我假设您通过主键获取单行,因此只有一个对象。

解决此问题的最简单方法是将字段添加到对象。我从 5.3 开始就没有使用过 PHP,所以不能确定,但​​它就像添加一样简单

$obj->user_ip = $user_ip_address;

循环内。

顺便说一句,有几个问题要问你:

  1. 如果它应该导致单行,为什么要使用循环?
  2. 为什么要将变量直接嵌入到 SQL 查询中。它很容易受到攻击,请阅读有关 sql-injections 以及如何防止它的信息(有一天,我真的很厌倦在 SO 上告诉人们使用 PDO 和准备好的语句,所以请阅读它),
  3. 您是否阅读过有关mysql_fetch_objectand的文档array_merge?为什么不呢(因为如果你读过它,你就不会问这个问题)。
  4. 试过调试?例如附加调试器并观察变量内容?插入日志记录或(上帝原谅我)调试打印echo
  5. “没有工作”是一个非常糟糕的错误描述。这次你很幸运,因为错误很明显。下一次,请说得更具体一些。
于 2013-01-11T15:50:02.007 回答
0

尝试这个:

echo json_encode(array('users' => $arr, 'user_ip' => $user_ip_address));

附带说明:您应该使用 PHP PDO 类来连接和查询数据库。

于 2013-01-11T15:43:05.260 回答