我有一個奇怪的時間將所有的字段名作爲PHP中MySQL Query的數組的鍵。所有的值都是從查詢到數組,而不是所有的鍵。我使用JSON對響應進行編碼並將其發送給Android客戶端。PHP沒有寫入MySQL中的所有數組的鍵查詢
以下是JSON Array
中包含的JSON Objects
之一的原始輸出。正如你所看到的,許多鍵只是數字。數字的順序也不與原始查詢對齊。
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): {
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "STATE": "1",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "RECEIVER_ID": "29",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "LAST_MODIFIED": "2013-08-17 06:15:01",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "CREATED": "2013-08-07 15:51:25",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "UNIQUE_ID": "cef3fc71-073e-11e3-8ffd-0800200c9a66",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "3": "2",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "2": "29",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "1": "918fa7f5-073c-11e3-8ffd- 0800200c9a66",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "0": "2",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "7": "2013-08-07 15:51:25",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "6": "2013-08-17 06:15:01",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "DATA_RECORD_UUID": "918fa7f5-073c-11e3-8ffd-0800200c9a66",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "5": "cef3fc71-073e-11e3-8ffd-0800200c9a66",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "4": "1",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "ID": "2",
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): "IS_TEST": "2"
08-18 05:41:49.130: I/GETJSON=ACCESSOR(JSON)(20407): },
我已經創造了一個記錄數組使用此項功能:
public function getRowArray($mysql_query_result){
$result=array();
while($row=mysql_fetch_array($mysql_query_result)){
$result[]=$row;
}
return $result;
}
而且查詢結果來自於該塊,與預逃脫mysql_real_escape_string變量:
$ary=mysql_query("SELECT tRelations.ID,tRelations.DATA_RECORD_UUID,tRelations.RECEIVER_ID,
tRelations.IS_TEST,tRelations.STATE,tRelations.UNIQUE_ID,tRelations.LAST_MODIFIED,
tRelations.CREATED FROM tRelations
JOIN tUserData ON (tUserData.UNIQUE_ID=tRelations.DATA_RECORD_UUID)
JOIN tUsers ON (tUsers.ID=tUserData.USER_ID)
WHERE tUsers.ID=$user_id AND tRelations.last_modified>'$last_sync'
ORDER BY tRelations.ID ASC;") or die(mysql_error());
if(mysql_num_rows($ary)>0){
$array2= $this->getRowArray($ary);
可能任何人都知道鑰匙爲什麼出現故障而不是全部被寫入?或者,其他人是否贊成將MySQL結果轉換爲JSON數組的其他方法?
我已經在輸入變量上使用了escape_string,所以我不認爲這回答了我的問題。但是,謝謝。 –
感謝您的編輯。字段出現在JSON對象中的順序不是有意的,並且是問題的一部分。我希望它以我在OP中的查詢中的順序出現,即從ID開始,而不是狀態。我不明白爲什麼它不是。 –
通常你應該對JSON的順序太擔心,因爲與JSON的XML不同,沒有方案。當轉換爲對象或數組時,它的名稱不是按順序訪問的。但'json_encode'按照鍵值對的添加順序執行。 '$ json [「first」] = 1; $ json [「second」] = 2; json_encode($ json);'結果在'{「first」:1,「second」:2}'。這可能是mysql在生成行時在內部將字段添加到列表的方式 – Tseng