使用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 - 为什么会发生?

+0

连接不工作!!! – shashi

+0

由于'functions.php'文件已经包含'dbconnect.php',因此不需要在控制器函数中包含该文件。一般来说,我会建议创建一个db-class(或者使用任何已经存在的优秀db抽象库)。 –

+0

如果我评论require_once('dbconnect.php');在我的苗条代码行 - 我有同样的错误。我还需要Slim代码中的dbconnect.php脚本。你能提供任何这种抽象的例子作为答案吗? – moonvader

因为$mysqli;不在全局范围内。你正在使用不好的做法。重构您的代码以利用先进的Slim PHP功能,如Dependency Container或依赖注入。

通过在另一个函数中包含dbconnect文件,您可以有效地将其变量的作用域限定在该作用域范围内。你可以简单地删除关键字global,代码应该可以工作。

+0

如果我删除全局$ mysqli;从功能代码 - 它仍然无法正常工作 – moonvader