在PHP中获取正确的JSON响应

时间:2016-09-14 16:28:22

标签: php angularjs json database

我对PHP很陌生,我已经提到了一些例子并制作了一个从数据库中获取数据的代码。但如果找不到数据库,我会收到文本响应,如果没有找到数据库或配置错误,任何人都可以建议如何获得正确的JSON响应

这是我的$ http.get方法

 $http.get('client/php/popData.php')
        .success(function(data) {
            $scope.blogs = data;
        })
        .error(function(err) {
            $log.error(err);
        })

popdata.php用于从数据库中获取数据

<?php
$data = json_decode(file_get_contents("php://input"));

include('config.php');

$db = new DB();

$data = $db->qryFire();

echo json_encode($data);

?>

这是我的config.php

<?php
define("__HOST__", "localhost");
define("__USER__", "username");
define("__PASS__", "password");
define("__BASE__", "databasename");

class DB {
    private $con = false;
    private $data = array();

    public function __construct() {
        $this->con = new mysqli(__HOST__, __USER__, __PASS__, __BASE__);

        if(mysqli_connect_errno()) {
            die("DB connection failed:" . mysqli_connect_error());
        }
    }

    public function qryPop() {
        $sql = "SELECT * FROM `base` ORDER BY `id` DESC";
        $qry = $this->con->query($sql);
        if($qry->num_rows > 0) {
            while($row = $qry->fetch_object()) {
                $this->data[] = $row;
            }
        } else {
            $this->data[] = null;
        }
        $this->con->close();
    }

    public function qryFire($sql=null) {
        if($sql == null) {
            $this->qryPop();
        } else {
            $this->con->query($sql);
            $this->qryPop();    
        }
        // $this->con->close();
        return $this->data;
    }
}
?>

2 个答案:

答案 0 :(得分:0)

替换DB class __construct函数中的行die("DB connection failed:" . mysqli_connect_error());
die( json_encode( array('status' => 'error') ) );

当应用程序无法连接到数据库时,它将提供

{"status": "error"}

我没有检查过这个。但我希望它能起作用

顺便说一句,这是我在stackoverflow上的第一个答案。对不起,我很抱歉。纠正他们

答案 1 :(得分:0)

使用Exceptions

更改您的课程DB,如下所示:

public function __construct() {
    $this->con = new mysqli(__HOST__, __USER__, __PASS__, __BASE__);

    if(mysqli_connect_errno()) {
        throw new Exception("DB connection failed:" . mysqli_connect_error());
    }
}

然后将你的popdata.php更改为

<?php
$data = json_decode(file_get_contents("php://input"));


include('config.php');

try {
    $db = new DB();
    $data = $db->qryFire();
} catch (Exception $e) {
    echo json_encode(['error' => $e->getMessage()]);
    exit();
}
echo json_encode($data);

这样,在构建DB类并执行DB::qryFire

时,您将在JSON中获得任何抛出的异常错误响应

如果您想捕获警告,可以尝试修改DB类,如下所示:

public function __construct() {
    ob_start();
    $this->con = new mysqli(__HOST__, __USER__, __PASS__, __BASE__);
    $warning = ob_clean();

    if ($warning) {
        throw new Exception($warning);
    }

    if(mysqli_connect_errno()) {
        throw new Exception("DB connection failed:" . mysqli_connect_error());
    }
}

您还可以添加

来关闭警告和通知
error_reporting(E_ERROR);

位于文件顶部