运行 MySQL 使用 Slim Framework 从外部脚本查询
Run MySQL query from external script with Slim Framework
我正在使用 Slim Framework 创建 REST API。
在我的 mysql 数据库中也有 table,我在其中存储有关对服务器的每个请求的信息。
我有一个名为 functions.php 的单独文件,其中我有 log_request() 函数
require_once('dbconnect.php');
function log_request() {
global $mysqli;
$query = "INSERT INTO log_table (....) VALUES (...) ";
$mysqli->query($query);
}
如果我 运行 这个脚本 - 新记录被添加到我的 table。但是当我 运行 它使用 Slim
$app->get('/api/something', function($request, $response) {
require_once('dbconnect.php');
include_once('functions.php');
log_request();
});
我收到这个错误
Call to a member function query() on null
所以 log_request() 中的 $mysqli 为 null - 为什么会这样?
因为 $mysqli;
不在全局范围内。您正在全面采用不良做法。重构您的代码以利用高级 Slim PHP 功能,例如 Dependency Container 或依赖注入。
通过将 dbconnect
文件包含在另一个函数中,您可以有效地将其变量限定在该块范围内。您可以简单地删除 global
关键字,代码应该可以工作。
如 Scriptonomy 所述 - 为了使用 MySQL 或准备、管理和注入应用程序依赖项,我们应该使用依赖项容器。
https://www.slimframework.com/docs/v3/concepts/di.html
步骤 1
创建dependencies.php 文件
// DIC configuration
$container = $app->getContainer();
$container['db'] = function ($c) {
$host = "localhost";
$user = "user";
$pass = "password";
$db_name = "database_name";
$mysqli = new mysqli($host, $user, $pass, $db_name);
return $mysqli;
};
步骤 2
在$app->运行();
之前添加这段代码
// Set up dependencies
require __DIR__ . '/../app/dependencies.php';
步骤 3
现在您可以使用 mysql(或任何其他注入)
$app->post('foo', function ($request, $response, $args) {
$res = $this->db->query("SELECT * FROM `app_jobs`");
.......
});
我正在使用 Slim Framework 创建 REST API。 在我的 mysql 数据库中也有 table,我在其中存储有关对服务器的每个请求的信息。
我有一个名为 functions.php 的单独文件,其中我有 log_request() 函数
require_once('dbconnect.php');
function log_request() {
global $mysqli;
$query = "INSERT INTO log_table (....) VALUES (...) ";
$mysqli->query($query);
}
如果我 运行 这个脚本 - 新记录被添加到我的 table。但是当我 运行 它使用 Slim
$app->get('/api/something', function($request, $response) {
require_once('dbconnect.php');
include_once('functions.php');
log_request();
});
我收到这个错误
Call to a member function query() on null
所以 log_request() 中的 $mysqli 为 null - 为什么会这样?
因为 $mysqli;
不在全局范围内。您正在全面采用不良做法。重构您的代码以利用高级 Slim PHP 功能,例如 Dependency Container 或依赖注入。
通过将 dbconnect
文件包含在另一个函数中,您可以有效地将其变量限定在该块范围内。您可以简单地删除 global
关键字,代码应该可以工作。
如 Scriptonomy 所述 - 为了使用 MySQL 或准备、管理和注入应用程序依赖项,我们应该使用依赖项容器。
https://www.slimframework.com/docs/v3/concepts/di.html
步骤 1
创建dependencies.php 文件
// DIC configuration
$container = $app->getContainer();
$container['db'] = function ($c) {
$host = "localhost";
$user = "user";
$pass = "password";
$db_name = "database_name";
$mysqli = new mysqli($host, $user, $pass, $db_name);
return $mysqli;
};
步骤 2
在$app->运行();
之前添加这段代码// Set up dependencies
require __DIR__ . '/../app/dependencies.php';
步骤 3
现在您可以使用 mysql(或任何其他注入)
$app->post('foo', function ($request, $response, $args) {
$res = $this->db->query("SELECT * FROM `app_jobs`");
.......
});