2017-10-18 125 views
0

我正在使用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

回答

0

因爲$mysqli;不在全局範圍內。你正在使用不好的做法。重構您的代碼以利用先進的Slim PHP功能,如Dependency Container或依賴注入。

通過在另一個函數中包含dbconnect文件,您可以有效地將其變量的作用域限定在該作用域範圍內。你可以簡單地刪除關鍵字global,代碼應該可以工作。

+0

如果我刪除全局$ mysqli;從功能代碼 - 它仍然無法正常工作 – moonvader