2017-10-18 4 views
0

スリムフレームワークを使用してREST APIを作成しています。 mysql dbには、サーバーへの各リクエストに関する情報を格納するテーブルもあります。スリムフレームワークで外部スクリプトから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(); 
}); 

を使用して、それを実行するときしかし、私はそうlog_request内部$ mysqliのは、()がnullであるヌル

上メンバ関数クエリ(へ

コール)、このエラーが発生します - それはなぜ起こるのですか?

+0

接続していません! – shashi

+0

ファイル 'functions.php'には既に' dbconnect.php'が含まれているので、そのファイルをコントローラ関数にも含める必要はありません。一般的に、私はdbクラスを作成することをお勧めします(または既存の優れたdb抽象ライブラリを使用する)。もし私がコメントをrequire_once( 'dbconnect.php'); –

+0

;私のスリムコードのライン - 私は同じエラーがあります。スリムコードでdbconnect.phpスクリプトも必要です。あなたはそのような抽象化の例として答えを提供できますか? – moonvader

答えて

0

$mysqli;はグローバルスコープにはありません。あなたはすべての面で悪い習慣を採用しています。コードをリファクタリングして、Dependency ContainerやDependency Injectionなどの高度なSlim PHP機能を活用してください。

dbconnectファイルを別の関数に含めると、そのブロックスコープにその変数を効果的にスコープ設定できます。 globalキーワードを削除するだけで、コードが機能するはずです。

+0

もしグローバル$ mysqliを削除すると、機能コードから - まだ動作していない – moonvader

関連する問題