json_encode返回布尔值而不是 JSON 字符串


json_encode is returning boolean values instead of json string

非常简单:我使用预准备语句来选择数据并以json_encode形式返回。

问题:我没有收到一个充满返回数据的 JSON 字符串,而是得到这样的东西:

[true, true, true, true]

我的猜测是,它正在检查是否设置了每个值,然后它只是以布尔形式返回值是否设置。

$stmt = $connection->prepare("SELECT * FROM details WHERE age = ?");
$stmt->bind_param('i', $age);
$stmt->execute();
$json = array();
while($row = $stmt->fetch()){
$json[] = $row;
}
echo json_encode($json);

这是我正在使用的 AJAX。

$(document).ready(
    function () {
        $('#call_back_btn').click(function() {
            $.post("process.php", {
                name:   $('#name').val(),
                age:    $('#age').val(),
                value:  $('#value').val(),
                task:   "submit_prepared"
            }, 
            function(data) {
                alert(data);
            })
        })
    });

我应该怎么做才能将我的数据返回到 JSON 字符串中?谢谢。

请查看 $stmt->fetch() 的文档。您收到布尔值是完全正确的。修改了代码以使用 bind_result

$stmt = $connection->prepare("SELECT name, age FROM details");
$stmt->execute();
$stmt->bind_result($name, $age);
$json = array();
while($stmt->fetch()){
  $json[] = array("name" => $name, "age" => $age);
}
echo json_encode($json);

尝试从 php 打印$json,以确保数组正确。然后再次在 php 中打印 json_encode($json) 变量,不带 ajax。我通常对查询进行硬编码并直接从浏览器运行它。这样,您将确保php生成正确的数据。

还可以尝试使用 $.ajax 函数。这样,您将拥有更多的控制权。

$.ajax({
    url: 'process.php',
    type: 'POST',
    dataType: 'JSON',
    data: {YOUR DATA GOES HERE},
    success: function(data){
            alert(data);
     }
});