我尝试从查询中获取数据并将其打印到屏幕上,但它没有显示任何内容。
$pdo=new PDO("mysql:dbname=usuario;host=localhost","root","root");
$statement=$pdo->prepare("SELECT * FROM usuario WHERE estado = 1 ORDER BY idusuario desc;");
$statement->execute();
if (!$statement){
echo 'Error al ejecutar la consulta';
}{
echo 'intentando obtener registros <br>';
while ($results = $statement->fetchAll(PDO::FETCH_ASSOC)){
$arreglo['data'][]= $results;
}
echo json_encode($arreglo);
}
调查发现可能是字符编码的原因,所以据说添加array_map $arreglo['data'][] = array_map("utf8_encode", $results);
可以解决问题,添加array_map后至少它显示了一些东西..它显示了空值这个出现:
{"data":[[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]]}
我将展示如何在 PDO 和 MySQLi 中做到这一点。
1.使用PDO
如果使用
fetchAll
PDO 中的方法。您不再需要在循环中读取数据,因为此方法:所以代码可能如下所示:
$results
正如手册所说,代码将在使用时将所有结果存储在变量中fetchAll
。此外,它将它们存储在一个关联数组中,该数组在 json 中将对应于一个键/值数据集。2. 使用 MySQLi
MySQLi 有一个方法
fetch_all
,但它只有在您安装了驱动程序时才可用mysqlnd
。由于我们对此不确定,并且由于我们不知道您的代码将来是否可以在没有该驱动程序的计算机上执行,因此我们最好使用对任何系统都有效的代码。我们将使用 方法检索数据
fetch_assoc
,然后我们将在循环中读取它以创建包含所有行的数组。3.关于字符集
有时使用 JSON 会出错,因为在创建连接时未建立适当的字符集,导致数据编码错误。
在 PDO 中设置字符集
如果要在创建连接对象后执行此操作,可以执行以下操作:
如果您想在构造函数中执行此操作,请将其传递到构造函数末尾的数组中(请参阅本节末尾的链接)。
在 MySQLi 中设置字符集
您也可以在创建对象后执行此操作:
或者在构造函数中指明。
有关编码问题的更多详细信息,您可以查阅此问题的答案:为什么从数据库中获取的某些数据中会出现检查字符(�)?
该错误是因为 json_encode() 无法处理某些字符,请在查询数据之前尝试运行以下查询:
你的代码是这样的,