我对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;
}
}
?>
答案 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
如果您想捕获警告,可以尝试修改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);
位于文件顶部