Php json_encode传递空值

Php json_encode传递空值,php,mysql,json,Php,Mysql,Json,代码: <?php $datoBuscar = $_GET["term"]; $conexion = mysql_connect("localhost", "root", ""); mysql_select_db("ap_contable"); $ssql = "SELECT provincia_id, nombre, codigopostal FROM ciudades WHERE codigopostal LIKE '%" . $datoBuscar . "%' LIMIT 50

代码:

 <?php
$datoBuscar = $_GET["term"];

$conexion = mysql_connect("localhost", "root", "");
mysql_select_db("ap_contable");

$ssql = "SELECT provincia_id, nombre, codigopostal FROM ciudades WHERE codigopostal LIKE '%" . $datoBuscar . "%' LIMIT 50";
$rs = mysql_query($ssql, $conexion);

$arrayElementos = array();

while ($fila = mysql_fetch_array($rs)){

     echo $fila[provincia_id];

     $queryp = "SELECT nombre FROM provincias WHERE id = '$fila[provincia_id]' LIMIT 1";
     $resultp = mysql_query($queryp, $conexion);
     $foundp = mysql_fetch_array($resultp);

     echo $foundp['nombre'];

     $row['prov'] = $foundp['nombre'];
     $row_set[] = $row;

}
echo json_encode($row_set);
?>

我特意放置了ECHO,以查看它是否从MySQL数据库中获取数据,以及是否得到了数据。问题是,当我将其分配给数组$row['prov']=$foundp['nombre']时;问题在哪里?如果它说NULL,那么应该说Entre Rios

您的字符串需要UTF-8编码(这是
json\u encode()
要求)。试试这个:

$row['prov'] = utf8_encode($foundp['nombre']);

或者,您可以在MySQL连接中将
字符集设置为
utf8mb4
。理想情况下,您应该在UTF-8上拥有所有功能。阅读。

嗯,您的代码错误的原因有很多:

  • 不推荐使用mysql 改用PDO
  • 传递给SQL的未受保护的$datoBuscar变量
  • 未使用的$arrayElementos

  • 您应该像这样连接这两个表:
    SELECT p.nombre FROM provincias AS p JOIN ciudades AS c ON p.id=c.provincia\u id,其中c.cod类似“%”,$datobusar。“%”

  • 未定义$row_集合

  • 未定义$row

  • 结束?>不应在纯PHP文件中使用

  • 因此,它应该是这样的(未经测试的代码):


    PS:如果你想编写好的PHP代码,启用通知和警告错误报告,你会惊讶于你错过了什么以及“这段代码最初是如何工作的?!”

    要将$row数组分配到$row\u set数组,请使用

    $row_set = $row;
    
    这样,您将在$row_集合中获得$row数组的所有内容。 无论何时运行loog,并且在同一索引处设置$row_set的值,那么您将只获得数组中的最后一个循环执行值。如果需要所有结果,则可以使用
    array_push()
    php手册中的说明
    int-array\u-push(数组和$array,混合$value1[,混合$…])
    。 在你的情况下,你可以使用

    array_push($row_set, $row);
    
    而不是

    $row_set[] = $row;
    

    警告:如果您只是在学习PHP,请不要使用该界面。它是如此可怕和危险,以至于在PHP7中被删除。替换类和指南类说明了最佳实践。你的用户数据没有,也有,可以被利用。我不是一个专业的程序员。感谢你的建议,如果你使用PDO和占位符值,将在你的第二次查询中修复你的字符串插值错误。很高兴我能帮上忙。不要忘记接受对你帮助最大的答案,将问题标记为已解决。这??我的英语,我来自阿根廷,我用谷歌翻译。
    array_push($row_set, $row);
    
    $row_set[] = $row;