mysql查询的json_encode返回某些行的某些空列,但列不为null

时间:2012-07-05 12:01:50

标签: mysql json null

我正在创建一个小的php文件来获取我的android应用程序的mysql行。 检索我使用的每一行:

    $q=mysql_query($sql, $this->conn) or die (mysql_error());
while($e=mysql_fetch_assoc($q)) {
      $output[]=$e;
    }
print(json_encode($output));

但有时会让我输出不一致的信息。

这是一个例子: 行:

id = 1(正确) - name =“name1”(正确) - price = 200(正确) - price2 = null(正确) - area = null(NOT CORRECT)因为区域有价值“CentroCittà”......等等..

我该如何解决这个问题?

编辑:值为

[{ “ID”: “84”, “idutente1”:NULL, “idutente2”:NULL, “idutente3”:NULL, “idutente4”:NULL, “idutente5”:NULL, “idagente”:NULL,” annuncio“:”0“,”archiviato“:”0“,”dataarchiviazione“:”2012-07-05 13:31:19“,”tipoimmobile“:”Residenziale“,”metodo“:”Vendita“,”area“ “:null,”presentazione“:”1“,”主页“:”1“,”mappa“:”1“,”nome“:”Piazza Umberto I“,”luogo“:”Crotone“,”descrizione“: “60 mq composto da due vani oltre servizi,centralissimo buono per ufficio。”,“descdettagliata”:“ L'appartamentoèdivisoin due vani con cucina e bagno。< / p> \ r \ nPosto nel pieno centro e vicinissimo al lungomare Regina Margherita。< / p> \ r \ n Ottimo condominio。 Libero e disponibile da subito。 / P> “中, ”瓦尼“: ”2“, ”PREZZO“: ”87000“, ”prezzo1“: ”0“, ”prezzo2“: ”0“, ”prezzo3“: ”0“, ”prezzo4“:” 0“,”prezzo5“:”0“,”metriquadri“:”58“,”stato“:”在buono stato“,”riscaldamento“:”Autonomo“,”classeenergetica“:”Non dotato“,”piano“: “普里莫/ SECONDO / terzo”, “indicazioni”: “”, “墨脱”: “没有”, “邦卡”: “”, “importo”: “”, “finalita”: “”, “tipologia”: “” ,“ammortamento”:“”,“visite”:“20”,“timestamp”:“2012-06-25 10:48:01”,“nomefile”:“HPIM2268.jpg”}]

区域字段不为空,而是“CentroCittà”。其余的都是正确的。 我试图只显示带有mysql_fetch_assoc($ query)的“area”字段,它返回正确的结果:“CentroCittà”。这个问题只适用于json_encode。

SQL Variabile是:

$sql = sprintf("SELECT i.*, f.nomefile FROM immobili i LEFT JOIN foto f on(i.id=f.idimmobile AND f.copertina=1) WHERE i.id=%s", $_GET['id']);

这只是一个例子,如果我问其他行,区域字段也正确返回json_encode,其他字段返回null。这可能是与字符串和文本格式相关的问题吗?

2 个答案:

答案 0 :(得分:5)

问题已解决

$result = $mysql->query($sql);
while($row = mysql_fetch_assoc($result)) {
   $r[] = array_map('utf8_encode', $row);
}
echo json_encode($r);

谢谢

答案 1 :(得分:4)

这是一个编码问题。 json_encode()仅接受UTF-8字符串,如果字符串无效,则返回null UTF-8。

您可以通过在将数据传输到json_encode之前转换数据的编码来解决此问题。请查看iconv()mb_convert_encoding()

例如,假设您的数据以latin1编码:

$e = array_map(function($string) {
    return iconv("iso-8859-1", "utf-8", $string);
}, $e);

$output[] = $e;

或者如果你有php< 5.3:

function cb($string) {
    return iconv("iso-8859-1", "utf-8", $string);
}

$e = array_map('cb', $e);

$output[] = $e;