使用Slim Framework从外部脚本运行MySQL查询
问题描述:
我正在使用Slim Framework来创建REST API。 我的mysql数据库中还有一个表,用于存储每个请求到服务器的信息。使用Slim Framework从外部脚本运行MySQL查询
我有单独的文件名为functions.php的我哪里有log_request()函数
require_once('dbconnect.php');
function log_request() {
global $mysqli;
$query = "INSERT INTO log_table (....) VALUES (...) ";
$mysqli->query($query);
}
如果我运行此脚本 - 新的记录添加到我的餐桌。但是,当我运行它采用超薄
$app->get('/api/something', function($request, $response) {
require_once('dbconnect.php');
include_once('functions.php');
log_request();
});
我收到此错误
调用一个成员函数查询()上的空
所以$ mysqli的内部log_request()为null - 为什么会发生?
答
因为$mysqli;
不在全局范围内。你正在使用不好的做法。重构您的代码以利用先进的Slim PHP功能,如Dependency Container或依赖注入。
通过在另一个函数中包含dbconnect
文件,您可以有效地将其变量的作用域限定在该作用域范围内。你可以简单地删除关键字global
,代码应该可以工作。
+0
如果我删除全局$ mysqli;从功能代码 - 它仍然无法正常工作 – moonvader
连接不工作!!! – shashi
由于'functions.php'文件已经包含'dbconnect.php',因此不需要在控制器函数中包含该文件。一般来说,我会建议创建一个db-class(或者使用任何已经存在的优秀db抽象库)。 –
如果我评论require_once('dbconnect.php');在我的苗条代码行 - 我有同样的错误。我还需要Slim代码中的dbconnect.php脚本。你能提供任何这种抽象的例子作为答案吗? – moonvader