Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php json_encode正在返回NULL?_Php_Null_Json - Fatal编程技术网

Php json_encode正在返回NULL?

Php json_encode正在返回NULL?,php,null,json,Php,Null,Json,出于某种原因,“description”项返回带有以下代码的NULL: <?php include('db.php'); $result = mysql_query('SELECT * FROM `staff` ORDER BY `id` DESC LIMIT 2') or die(mysql_error()); $rows = array(); while($row = mysql_fetch_assoc($result)){ $rows[] = $row; } echo j

出于某种原因,“description”项返回带有以下代码的
NULL

<?php
include('db.php');

$result = mysql_query('SELECT * FROM `staff` ORDER BY `id` DESC LIMIT 2') or die(mysql_error());
$rows = array();
while($row = mysql_fetch_assoc($result)){
    $rows[] = $row;
}

echo json_encode($rows);
?>
以下是页面上的回应:

[{"id":"4","name":"Noter 2","description":null,"icon":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","date":"1262032317","company":"dBelement, LLC","companyurl":"http:\/\/dbelement.com\/","appurl":"http:\/\/noter2.dbelement.com"},{"id":"3","name":"Noter 2","description":null,"icon":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","date":"1262032317","company":"dBelement, LLC","companyurl":"http:\/\/dbelement.com\/","appurl":"http:\/\/noter2.dbelement.com"}]

有什么想法吗?

啊哈!!!这看起来太不对劲了,我的头都痛了。试试这样的东西

<?php
include('db.php');

$result = mysql_query('SELECT `id`, `name`, `description`, `icon` FROM `staff` ORDER BY `id` DESC LIMIT 20') or die(mysql_error());
$rows = array();
while($row = mysql_fetch_assoc($result)){
    $rows[] = $row;
}

echo json_encode($rows);
?>

也许有一些特殊的字符会把事情搞砸…

我打赌你是在用非utf8编码检索数据:尝试在你的
选择
查询之前放置
mysql\u查询('SET CHARACTER SET utf8')

如果你至少有PHP5.5,你可以使用,它将返回一个描述问题的字符串

如果您没有5.5,但在5.3之上,您可以使用查看问题所在

它将返回一个整数,您可以使用该整数来确定中的问题。目前(2012.01.19),标识符为:

0 = JSON_ERROR_NONE
1 = JSON_ERROR_DEPTH
2 = JSON_ERROR_STATE_MISMATCH
3 = JSON_ERROR_CTRL_CHAR
4 = JSON_ERROR_SYNTAX
5 = JSON_ERROR_UTF8
这些可能会在将来的版本中更改,因此最好参考手册


如果低于5.3,则表示运气不佳,无法询问错误是什么。

我也遇到了同样的问题,解决方法是使用自己的函数,而不是使用
json\u encode()


您应该在json_encode中传递utf8编码的字符串。您可以使用
utf8\u encode
array\u map()
函数,如下所示:

<?php
    $encoded_rows = array_map('utf8_encode', $rows);
    echo json_encode($encoded_rows);
?>

几天前,我对1个表也有同样的问题

首先尝试:

echo json_encode($rows);
echo json_last_error();  // returns 5 ?
如果最后一行返回5,问题在于您的数据。我知道,您的表格是UTF-8格式的,但未输入数据。例如,输入是在txt文件中,但在Win机器上用愚蠢的编码(在我的例子中是Win-1250=CP1250)创建的,并且该数据已经输入到数据库中

解决方案?查找新数据(excel、网页),通过PSPad编辑源txt文件(或其他任何方式),将编码更改为UTF-8,删除所有行,然后从原始数据中放入数据。保存进入数据库


您也只能将编码更改为utf-8,然后手动更改所有行(为col指定特殊字符-desc,…)。奴隶好…

ntd的anwser并没有解决我的问题。对于处于相同情况的人,以下是我最终处理此错误的方式: 只需对每个结果进行utf8_编码

while($row = mysql_fetch_assoc($result)){
    $rows[] = array_map('utf8_encode', $row);
}

希望有帮助

PHP.net推荐的设置字符集的方法是:


对于任何使用PDO的人,解决方案类似于

从,作为live.com上用户Kiipa的评论:

要获取UTF-8字符集,可以在DSN中指定

$link=new-PDO(“mysql:host=localhost;dbname=DB;charset=UTF8


对我来说,json_encode返回实体的空编码的问题是因为我的jsonSerialize实现获取了相关实体的整个对象;我通过确保获取相关/关联实体的ID并在有多个实体与要json序列化的对象关联时调用->toArray()解决了这个问题。注意,我指的是一个
在实体上实现JsonSerializable
的情况

首先,让我们把数组键放在引号中。您能提供有关“staff”表模式的信息吗。是否有一个名为description的列?如果我只是在for()语句之外执行
$r['description']
的回显,所有这些字段都将回显?或者$r['description']中的一些示例内容可能会有所帮助。它是什么数据类型?你能为数据库shema做一个截图吗?;-)[{“id”:“4”,“name”:“Noter 2”,“description”:null,“icon”:“http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2\/u 20091223182720-thumb.jpg”,“date”:“1262032317”,“company”:“dBelement,LLC”,“companyurl”:“http:\/\/\/dBelement.com\/”,“http:\/\/noter2.dBelement.com”},{“id”:“3”,“name”:“Noter 2”,“description”:null,“icon”:“http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2\u 20091223182720-thumb.jpg”,“日期”:“1262032317”,“公司”:“dBelement,LLC”,“公司URL”:“http:\/\/dBelement.com\/”,“appurl”:“http:\/\/noter2.dBelement.com”]@塔恩菲尔德:嗯,这是你想要的还是不想要的?哦……你有一些额外的信息在里面……这里……让我来帮你解决。是的,“描述”返回
null
如果描述返回
null
那么它可能是
null
。试试
echo$row['description']“
”;
在那个循环中,看看它说了什么。嗨,这个答案救了我的命,谢谢。我在这里也遇到了同样的问题。我有非utf8字符的值,比如“Validação de Formulários”“我知道这个问题现在有点老了,但这就是互联网的惊人之处!”!!嗨,这个答案救了我的命,谢谢。我也有同样的问题。我有一些非utf8字符的值,比如“Validaço de Formulários”。我知道这个问题现在有点老了,但这就是互联网的惊人之处!!由于PHP5.2.3的安全原因,mysql_set_字符集更好。有关详细信息,请参阅。因为UTF8是web上的通用语言。PHP(严格地)使用最常用的编码,而不是用额外的参数和开销来扰乱API,如果您使用不常见的(或者像您的情况一样,几乎是死气沉沉的)编码,则会给您带来转换负担。推荐的方法现在已经改变。我试图编辑此答案以包含链接,但被拒绝。正确的方法在我下面的回答中。@VeeK将字段存储在UTF-8中是不够的:您必须使用服务器才能用UTF-8回答客户端。AFAIK股票mysql和mariadb使用拉丁文1。我也有编码问题。w/混合编码。我找到的解决方案:或用于查看问题(例如,带有UTF8的字段将为空)。
<?php
    $encoded_rows = array_map('utf8_encode', $rows);
    echo json_encode($encoded_rows);
?>
echo json_encode($rows);
echo json_last_error();  // returns 5 ?
while($row = mysql_fetch_assoc($result)){
    $rows[] = array_map('utf8_encode', $row);
}