2017-10-18 2 views
0

슬림 프레임 워크를 사용하여 REST API를 생성하고 있습니다. 서버에 대한 각 요청에 대한 정보를 저장하는 my mysql db 테이블도 있습니다.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의 경우, 널 (null)에() 멤버 함수 쿼리에이 오류를

전화를 수신하고 - 왜 그러니?

+0

연결이 작동하지 않습니다 !!! – shashi

+0

'functions.php' 파일에 이미'dbconnect.php'가 포함되어 있기 때문에 컨트롤러 함수에 그 파일을 포함 할 필요가 없습니다. 일반적으로 db-class를 생성하거나 (이미 존재하는 훌륭한 db-abstraction 라이브러리를 사용하는 것이 좋습니다) –

+0

만약 내가 의견을 require_once ('dbconnect.php'); 내 슬림 코드에서 줄을 - 나는 같은 오류가 있습니다. 슬림 코드에서 dbconnect.php 스크립트가 필요합니다. 대답과 같은 추상화의 예를 제공 할 수 있습니까? – moonvader

답변

0

$mysqli;은 (는) 글로벌 범위에 있지 않습니다. 당신은 모든 나쁜 행동을하고 있습니다. 코드를 리팩토링하여 Dependency Container 또는 종속성 삽입과 같은 고급 Slim PHP 기능을 활용하십시오.

dbconnect 파일을 다른 함수 안에 포함 시키면 해당 블록 범위에 해당 변수의 유효 범위가 적용됩니다. global 키워드 만 삭제하면 코드가 작동합니다.

+0

만약 내가 글로벌 $ mysqli 삭제; 기능 코드에서 - 여전히 작동하지 않습니다. – moonvader