2017-10-07 50 views
0

的var_dump我們有一個$link變量,像這樣:json_encode VS上mysqli_connection

$link = mysqli_connect('localhost', 'user', 'pass', 'db'); 

var_dump($link);返回鍵的正確值:

["affected_rows"]=> int(0) 
["client_info"]=> string(79) "mysqlnd 5.0.11-dev - ..." 
["client_version"]=> int(50011) 
... 

json_encode($link)返回所有空:

"affected_rows": null, 
"client_info": null, 
"client_version": null, 
... 

有沒有辦法讓json_encoded字符串有t他同樣的價值觀?

回答

1

official documentation

參數

的值被編碼。可以是除資源外的任何類型。

您提供$link這是resource

source code似乎不支持的類型(如資源),它會產生"null"值:

default: 
     encoder->error_code = PHP_JSON_ERROR_UNSUPPORTED_TYPE; 
     if (options & PHP_JSON_PARTIAL_OUTPUT_ON_ERROR) { 
      smart_str_appendl(buf, "null", 4); 
    } 
+1

這是事實,但問題不在於是否json_encode''可以做編碼,它不能,我知道這個事實。問題是:*有沒有辦法讓json_encoded字符串具有相同的值?* –

0

我希望有人已經做到了這一點,並可能分享解決方案。目前還沒有解決方案,所以我會做一個嘗試。

正如@rkosegi指出的那樣,$link是一種資源。因此,我們應該期待以下幾點:

var_export定投的資源到一個數組(mysqli::__set_state) - 所以null又在發
foreach也把它作爲一個陣列,使我們null小號
var_dump能拿值(but could not be easily captured
然而print_r,使我們的價值觀,並且可以保存

所以,樂T的使用print_r

$raw = print_r($link, true); 

對於某些字符串分析,我們可以得到我們想要的東西。

更新 - 添加字符串告誡解析(error_list):

$link = mysqli_connect('localhost', 'root', 'lilo123', 'm1_s1'); 
$raw = print_r($link, true); 
$raw = explode(PHP_EOL, $raw); 
$link_arr = []; 
foreach($link as $k => $v) { 
    $match = array_filter($raw, function($var) use ($k) { return strpos($var, '['.$k.']'); }); 
    $val = array_values($match)[0]; 
    if(strpos($val, ' => ')) { 
    $val = explode(' => ', $val)[1]; 
    $link_arr[$k] = $val; 
    } 
} 
$link_json = json_encode($link_arr, JSON_PRETTY_PRINT); 
echo $link_json; 

輸出:

{ 
    "affected_rows": "0", 
    "client_info": "mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $", 
    "client_version": "50011", 
    "connect_errno": "0", 
    "connect_error": "", 
    "errno": "0", 
    "error": "", 
    "error_list": "Array", <-- no good 
    "field_count": "0", 
    "host_info": "Localhost via UNIX socket", 
    "info": "", 
    "insert_id": "0", 
    "server_info": "5.7.19-0ubuntu0.16.04.1", 
    "server_version": "50719", 
    "stat": "Uptime: 52396 Threads: 1 Questions: 36754 Slow queries: 0 Opens: 133 Flush tables: 1 Open tables: 60 Queries per second avg: 0.701", 
    "sqlstate": "00000", 
    "protocol_version": "10", 
    "thread_id": "5274", 
    "warning_count": "0" 
}