-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配列形式ではないと思います。他のデータと、jsonencodeを使用して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

これを試して:

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

余談ですが、データベースに接続してクエリを実行するには、PHP PDO クラスを使用する必要があります。

于 2013-01-11T15:43:05.260 に答える
0

mysql_fetch_object配列ではなく、オブジェクトを返します。つまり、$arr[] = $obj;配列にオブジェクトを追加するだけです。したがって、の実際の構造$arrは次のようなものです

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

あなたの特定のケースでは、主キーで単一の行をフェッチしていると想定しているため、オブジェクトは1つしかありません。

これを修正する最も簡単な方法は、オブジェクトにフィールドを追加することです。私は 5.3 から PHP を使っていないので、確かではありませんが、追加するのと同じくらい簡単です。

$obj->user_ip = $user_ip_address;

ループ内。

ところで、いくつか質問があります。

  1. 単一の行になる必要があるのに、なぜループを使用するのですか?
  2. 変数を SQL クエリに直接埋め込む理由。それは非常に脆弱です。sql-injections とそれを防ぐ方法について読んでください (ある日、SO で PDO と準備されたステートメントを使用するように人々に伝えるのに本当に疲れていたので、それについて読んでください)、
  3. mysql_fetch_objectとに関するドキュメントを読みましたarray_mergeか? そうではありません(読んだことがあれば、質問をしていないからです)。
  4. デバッグしてみましたか?たとえば、デバッガーを接続して変数の内容を監視しますか? ロギングまたは(神を許してください)debug print with echo?を挿入する
  5. 「動作しませんでした」というのは、かなり不適切なエラーの説明です。今回は、エラーが明らかだったので幸運でした。次回はもっと具体的にお願いします。
于 2013-01-11T15:50:02.007 に答える