2017-10-18 7 views
0

J'utilise Slim Framework pour créer une API REST. Il y a aussi une table dans mon mysql db où je stocke des informations sur chaque requête au serveur.Exécution d'une requête MySQL à partir d'un script externe avec Slim Framework

J'ai appelé fichier séparé functions.php où j'ai fonction log_request()

require_once('dbconnect.php'); 
function log_request() { 
    global $mysqli; 
    $query = "INSERT INTO log_table (....) VALUES (...) "; 
    $mysqli->query($query); 
} 

Si je lance ce script - nouveau record est ajouté à ma table. Mais quand je le lance en utilisant Slim

$app->get('/api/something', function($request, $response) { 
    require_once('dbconnect.php'); 
    include_once('functions.php'); 

    log_request(); 
}); 

Je reçois cette erreur

Appel à sur null

une requête de fonction membre() Donc mysqli $ l'intérieur est nul log_request() - Pourquoi ça arrive?

+0

la connexion ne fonctionne pas !!! – shashi

+0

Comme le fichier 'functions.php' contient déjà' dbconnect.php', il n'est pas nécessaire d'inclure ce fichier dans votre fonction de contrôleur. En général, je recommande de créer une classe db (ou d'utiliser l'une des excellentes bibliothèques db-abstraction qui existe déjà) à la place. –

+0

si je commente require_once ('dbconnect.php'); ligne dans mon code Slim - J'ai la même erreur. J'ai aussi besoin du script dbconnect.php en code Slim. Pouvez-vous fournir un exemple d'une telle abstraction comme réponse? – moonvader

Répondre

0

Parce que $mysqli; n'a pas de portée globale. Vous employez de mauvaises pratiques partout. Refactorisez votre code pour tirer parti des fonctionnalités PHP Slim avancées telles que Dependency Container ou Dependency Injection. En incluant le fichier dbconnect dans une autre fonction, vous avez effectivement étendu ses variables à cette portée de bloc. Vous pouvez simplement supprimer le mot-clé global et le code devrait fonctionner.

+0

Si je supprime global $ mysqli; à partir du code de fonction - il ne fonctionne toujours pas – moonvader