mysql查询的json_encode返回某些行的一些空列,但这些列不为空 [英] json_encode for mysql query returns some null columns of some rows, but the columns aren't null

查看:147
本文介绍了mysql查询的json_encode返回某些行的一些空列,但这些列不为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm creating a little php file to get mysql rows for my android application. to retrieve each single row i use:

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

但有时它会返回不一致的输出.

but sometimes it returns me an inconsistent output.

这是一个例子: 行:

id = 1(正确)-name ="name1"(正确)-price = 200(正确)-price2 = null(正确)- area = null(未正确),因为区域具有值"CentroCittà" ..依此类推.

id=1 (correct) - name="name1" (correct) - price=200 (correct) - price2=null (correct) - area=null (NOT CORRECT) because area has a value of "Centro Città" .. and so on..

我该如何解决这个问题?

How can i resolve this problem?

值是

[{"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,"区域:null," presentazione:" 1,"主页:" 1," mappa:" 1," nome:" Piazza Umberto I," luogo:" Crotone," descrizione: 每平方米60平方米的建筑面积,中央建筑,每平方米.","descdettagliata": L'appartamentoèdiviso in due vani con cucina e bagno.< p> \ r \ n肺癌组织Regina Margherita.</p> \ r \ n Ottimo condominio. Libero e disponibile da subito./p>," vani:" 2," prezzo:" 87000," prezzo1:" 0," prezzo2:" 0," prezzo3:" 0," prezzo4:" 0," prezzo5:" 0," metriquadri:" 58," stato:"在buono stato," riscaldamento:" Autonomo," classeenergetica:" Non dotato,"钢琴: "Primo/secondo/terzo","indicazioni":","mutuo":否","banca":","importo":","finalita":","tipologia":" ,"ammortamento":","visite":"20","timestamp":"2012-06-25 10:48:01","nomefile":"HPIM2268.jpg"}"

[{"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","homepage":"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 è diviso in 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>","vani":"2","prezzo":"87000","prezzo1":"0","prezzo2":"0","prezzo3":"0","prezzo4":"0","prezzo5":"0","metriquadri":"58","stato":"In buono stato","riscaldamento":"Autonomo","classeenergetica":"Non dotato","piano":"Primo/secondo/terzo","indicazioni":"","mutuo":"No","banca":"","importo":"","finalita":"","tipologia":"","ammortamento":"","visite":"20","timestamp":"2012-06-25 10:48:01","nomefile":"HPIM2268.jpg"}]

area字段不为空,而是"CentroCittà".其余的是正确的. 我试图仅显示带有mysql_fetch_assoc($ query)的"area"字段,它向我返回正确的结果:"CentroCittà".此问题仅与json_encode有关.

area field is not null, but is "Centro Città". The rest is correct. I tried to show only the "area" field with a mysql_fetch_assoc($query) and it returns me the correct result: "Centro Città". This problem is only with json_encode.

SQL可变性为:

$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']);

这只是一个例子,如果我询问其他行,则Area字段也可以使用json_encode正确返回,而其他字段则返回null.可能是与字符串和文本格式有关的问题吗?

This is only an example, if i ask other rows, the area field returns correctly also with json_encode and other fields return null. Could it be a problem related with the strings and the text format?

推荐答案

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

It's an encoding problem. json_encode() accepts only UTF-8 strings, and returns null if a string is not valid UTF-8.

您可以通过在将数据传递给json_encode之前转换数据的编码来解决此问题.看看 iconv()

You can fix this by converting the encoding of your data before passing it to json_encode. Take a look at iconv() or mb_convert_encoding().

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

For example, assuming your data is encoded in latin1:

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

$output[] = $e;

或者如果您有php< 5.3:

Or if you have php < 5.3:

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

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

$output[] = $e;

这篇关于mysql查询的json_encode返回某些行的一些空列,但这些列不为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆