我正在尝试使用json_encode传递一个数组,该数组是mySQL PDO查询从php到javascript的结果。
但是,如果其中一个字段包含空格,或者,如果我尝试在字符串上使用数据库函数(仅选择第一个非空格部分),则该对象似乎不存在,并且我的代码无法编译
以下是已执行的代码:
<?php
$sql = "SELECT id, substring_index(firstNames, ' ', 1) as firstName, lastName, gender, idPersonFather, idPersonMother
FROM a_person";
$result = $db->query($sql);
while ($row = $result->fetch(PDO::FETCH_ASSOC)){
$personArray[$row['id']] = Array( 'firstName' => $row['firstName']
, 'lastName' => $row['lastName']
, 'gender' => $row['gender']
, 'idFather' => $row['idPersonFather']
, 'idMother' => $row['idPersonMother']);
}
?>
<html>
...
<script type="text/javascript" src="js/includes/grid_classes.js">
var personArray=<?php echo json_encode($personArray); ?>//get php aray
var someNextStuff
...etc
这将导致错误
Uncaught SyntaxError: Unexpected token var
因为行var someNextStuff
出现意外,显然该对象被翻译成空字符串?
此外,以下选择会导致同样的问题:
$sql = "SELECT id, firstNames, lastName, gender, idPersonFather, idPersonMother
FROM a_person";
firstNames包含像#Anna; Maria Cecilia&#39;和NULL这样的值。
SQL查询直接在数据库上工作(在phpmyadmin中)。
但是,如果我从select和数组中省略firstNames
字段,代码运行正常。
导致这种情况的原因是什么?
感谢您的帮助..
编辑:
我现在发现了
SELECT id, substring_index(coalesce('Maria anna blah','?'), ' ', 1) as firstName, <rest of fields>
有效,但
SELECT id, substring_index(coalesce(firstNames,'?'), ' ', 1) as firstName, <rest of fields>
没有。
所以它必须是那个领域的东西,我猜......
答案 0 :(得分:1)
如果您查看json_last_error_msg
的输出(或只是json_last_error
,如果您使用的是旧的PHP版本,那么在这种情况下,您将只获得一个需要与常量匹配的整数) ,您将收到以下错误之一:
控制字符错误,可能编码错误
或
格式错误的UTF-8字符,可能编码错误
当您尝试将UTF-8数据存储在未使用UTF-8编码的数据库中时,您发现的两个奇怪的字符(Ã和unprintable)会发生这种情况。
您可以尝试通过在可能包含unicode字符的每个数据上调用utf8_decode
来解决此问题。
但是,解决此问题的最佳方法是确保您的数据库使用的是UTF-8。
答案 1 :(得分:0)
好吧,我觉得那个领域的其中一行确实是假值! (感谢Jakumi)
耐心地从有序选择向阵列添加更多行,直到失败,并且在添加带有firstnames Ãline
的记录时会发生这种情况。
复制粘贴我刚刚发现,在... 0089之后有一个不可读的字符......无论是什么......
HEX c289
然而,仅仅在Ã
字符之后移除值是不够的,似乎我的字符集可能太有限了。但是我怀疑这是脏数据,因此它将返回源而不是我扩展字符集..