AngularJS .get 方法导致内部错误 500
AngularJS .get Method Causing Internal Error 500
我在本地计算机上使用 xampp 获得了代码的工作版本,但是当我将它上传到我的 Raspberry Pi 时,它似乎失控了。
基本上我有一个 angularjs 脚本调用一个名为 dbConn.php 的文件,该文件位于同一目录中并在本地计算机上工作,但在上传到 Pi 时不工作。
function raspberryController($scope, $http, $timeout) {
var poll = function() {
$timeout(function() {
try{
$http.get("dbConn.php")
.success(function(response) {$scope.names = response;})
.error(function(data, status, header, config) {
console.log(alert, status, header, config);
});
} catch (e) {
console.log("Got an error!",e);
throw e;
// rethrow to not marked as handled
}
poll();
}, 1000);
}
poll();
}
dbConn.php
<?php
//$db = new SQLite3('system/modules/test.db');
header("Access-Control-Allow-Origin: *");
try{
$dbh = new PDO('sqlite:system/test.db') or die("cannot open db");
} catch(Exception $e) {
echo $e->getMessage();
}
$query = 'SELECT * FROM connected;';
$results = $dbh->query($query);
$outp = '[';
foreach($dbh->query($query) as $row){
if ($outp != "[") {
$outp .= ",";
}
$outp .= ' { "ID":"' . $row[0] .'",';
$outp .= '"IP":"' . $row[1] .'",';
$outp .= '"CONNECTED":"' . $row[2] .'",';
$outp .= '"LEASE_TIME":"' .$row[3] .'" } ';
}
$outp .= ']';
echo($outp);
?>
你有:
try { $dbh = new PDO('sqlite:system/test.db') or die("cannot open db"); } catch(Exception $e) { echo $e->getMessage(); }
您正在尝试在 try 之外调用 $dbh 对象上的 query() 函数。
link PHP 中的变量范围:http://php.net/manual/en/language.variables.scope.php
要解决你的问题,要么在 try 块外有一个空的 $dbh 变量,然后在 try 中初始化它,例如:
$dbh = null;
try {
$dbh = new PDO('sqlite:system/test.db') or die('cannot open db');
} catch (Exception $e) {
//some code to handle it in here
exit(); //to stop anything else from executing
}
$result = $dbh->query();
解决该问题的另一种方法是将其余代码放在您为初始化 $dbh 变量而创建的 try/catch 块中。
try {
$dbh = new PDO('sqlite:system/test.db') or die('cannot open db');
$query = 'SELECT * FROM connected;';
$results = $dbh->query($query);
$outp = '[';
foreach($results as $row){
if ($outp != "[") {
$outp .= ",";
}
$outp .= ' { "ID":"' . $row[0] .'",';
$outp .= '"IP":"' . $row[1] .'",';
$outp .= '"CONNECTED":"' . $row[2] .'",';
$outp .= '"LEASE_TIME":"' .$row[3] .'" } ';
}
$outp .= ']';
echo $outp;
} catch (Exception $e) {
echo $e->getMessage();
}
您最好将数据库逻辑抽象到一个单独的 class 中,并像单例或静态 class 一样使用它,如其他 post 中所述:Best practices for a PDO class?.
哦,为了将来参考,如果您遇到无用的错误 500,找出问题所在的最简单方法是在您的终端上使用 tail -f /var/log/apache2/error.log
,如果您使用的是 Debian 发行版,例如作为 Raspbian.
我在本地计算机上使用 xampp 获得了代码的工作版本,但是当我将它上传到我的 Raspberry Pi 时,它似乎失控了。
基本上我有一个 angularjs 脚本调用一个名为 dbConn.php 的文件,该文件位于同一目录中并在本地计算机上工作,但在上传到 Pi 时不工作。
function raspberryController($scope, $http, $timeout) {
var poll = function() {
$timeout(function() {
try{
$http.get("dbConn.php")
.success(function(response) {$scope.names = response;})
.error(function(data, status, header, config) {
console.log(alert, status, header, config);
});
} catch (e) {
console.log("Got an error!",e);
throw e;
// rethrow to not marked as handled
}
poll();
}, 1000);
}
poll();
}
dbConn.php
<?php
//$db = new SQLite3('system/modules/test.db');
header("Access-Control-Allow-Origin: *");
try{
$dbh = new PDO('sqlite:system/test.db') or die("cannot open db");
} catch(Exception $e) {
echo $e->getMessage();
}
$query = 'SELECT * FROM connected;';
$results = $dbh->query($query);
$outp = '[';
foreach($dbh->query($query) as $row){
if ($outp != "[") {
$outp .= ",";
}
$outp .= ' { "ID":"' . $row[0] .'",';
$outp .= '"IP":"' . $row[1] .'",';
$outp .= '"CONNECTED":"' . $row[2] .'",';
$outp .= '"LEASE_TIME":"' .$row[3] .'" } ';
}
$outp .= ']';
echo($outp);
?>
你有:
try { $dbh = new PDO('sqlite:system/test.db') or die("cannot open db"); } catch(Exception $e) { echo $e->getMessage(); }
您正在尝试在 try 之外调用 $dbh 对象上的 query() 函数。
link PHP 中的变量范围:http://php.net/manual/en/language.variables.scope.php
要解决你的问题,要么在 try 块外有一个空的 $dbh 变量,然后在 try 中初始化它,例如:
$dbh = null;
try {
$dbh = new PDO('sqlite:system/test.db') or die('cannot open db');
} catch (Exception $e) {
//some code to handle it in here
exit(); //to stop anything else from executing
}
$result = $dbh->query();
解决该问题的另一种方法是将其余代码放在您为初始化 $dbh 变量而创建的 try/catch 块中。
try {
$dbh = new PDO('sqlite:system/test.db') or die('cannot open db');
$query = 'SELECT * FROM connected;';
$results = $dbh->query($query);
$outp = '[';
foreach($results as $row){
if ($outp != "[") {
$outp .= ",";
}
$outp .= ' { "ID":"' . $row[0] .'",';
$outp .= '"IP":"' . $row[1] .'",';
$outp .= '"CONNECTED":"' . $row[2] .'",';
$outp .= '"LEASE_TIME":"' .$row[3] .'" } ';
}
$outp .= ']';
echo $outp;
} catch (Exception $e) {
echo $e->getMessage();
}
您最好将数据库逻辑抽象到一个单独的 class 中,并像单例或静态 class 一样使用它,如其他 post 中所述:Best practices for a PDO class?.
哦,为了将来参考,如果您遇到无用的错误 500,找出问题所在的最简单方法是在您的终端上使用 tail -f /var/log/apache2/error.log
,如果您使用的是 Debian 发行版,例如作为 Raspbian.