2015-01-28 2 views
0

슬림 프레임 워크를 사용하여 서버 데이터베이스에 대한 RESTful API를 구축하고 있습니다. 나는 왜 내 INSERT 문이 실행되지 않는지 알아 내려고 노력하고있다. 내가 실행할 때마다 "오류 : 참"과 "소리를 저장하지 못했습니다. 다시 시도하십시오."라는 응답이 표시됩니다. 메시지. 내 DB에 나타나지 않는다는 사실로이 오류를 확인했습니다. 내 API의 다른 INSERT 쿼리가 정상적으로 작동하고 있으며이 삽입 쿼리를 MySQL에서 자체적으로 실행 해 보았지만이 함수가 작동하지 않는 이유를 알 수 없습니다. 내 DBHandler 파일슬림 프레임 워크 INSERT 쿼리가 작동하지 않습니다.

:

public function newSound($user_id, $sound, $sound_viz, $latitude, $longitude, $location, $title) { 
    $response = array(); 

    // Insert query 
    $stmt = $this->conn->prepare("INSERT INTO sounds (user_id, sound, sound_viz, latitude, longitude, location, title) VALUES (?, ?, ?, ?, ?, ?, ?)"); 
    $stmt->bind_param("sssddss", $user_id, $sound, $sound_viz, $latitude, $longitude, $location, $title); 
    $result = $stmt->execute(); 
    $stmt->close(); 

    // Check for successful insertion 
     if ($result) { 
      // Sound successfully inserted 
      return SOUND_CREATED_SUCCESSFULLY; 
     } else { 
      // Failed to post sound 
      return SOUND_CREATE_FAILED; 
     } 

} 

내 인덱스 파일에서 : 변수가 어떤 제안이나 조언이 SOUND_CREATED_SUCCESSFULLY 등이기 때문에

$app->post('/sounds/', function() use ($app) { 
     // check for required params 
     verifyRequiredParams(array('sound', 'sound_viz', 'latitude', 'longitude', 'location','title')); 

     $response = array(); 
     $sound = $app->request->post('sound'); 
     $sound_viz = $app->request->post('sound_viz'); 
     $latitude = $app->request->post('latitude'); 
     $longitude = $app->request->post('longitude'); 
     $location = $app->request->post('location'); 
     $title = $app->request->post('title'); 

     global $user_id; 
     $db = new DbHandler(); 

     // creating new sound 
     $sound_result = $db->newSound($user_id, $sound, $sound_viz, $latitude, $longitude, $location, $title); 

     if ($sound_result = SOUND_CREATED_SUCCESSFULLY) { 
      $response["error"] = false; 
      $response["message"] = "Sound saved successfully."; 
      $response['sound_id'] = $sound_id; 
      echoRespnse(201, $response); 
     } else { 
      $response["error"] = true; 
      $response["message"] = "Failed to save sound. Please try again."; 
      echoRespnse(200, $response); 
     }    
    }); 

내 DB 자격 증명이 올바른지? 감사!

+0

'printf ("Error : % s. \ n", $ stmt-> error); ' –

답변

0

신중한 디버깅 후, 모든 새로운 HTTP 요청으로 전역 변수 $ user_id가 재설정되므로 user_id가 제대로 전달되지 않는 것이 문제입니다 (항상 null 임). 이 방법을 사용하려면 세션 변수 또는 유사 항목을 통합하는 방법을 찾아야합니다. 희망은 앞으로이 문제가있는 사람에게 도움이되기를 바랍니다.

0

귀하의 비교에 서명 한 등호를 사용하고 있습니다 :
$sound_result = SOUND_CREATED_SUCCESSFULLY

$sound_result === SOUND_CREATED_SUCCESSFULLY을해야합니다.

PHP CodeSniffer과 함께 이와 유사한 많은 문제를 감지 할 수 있습니다. 이것은 매우 유용한 도구이며 PHP 프로젝트에 큰 도움이됩니다.

+0

을 사용하여 오류를 인쇄하십시오. 좋은 캐치이고 PHP 코드 네페어 팁에 감사드립니다! 나는 그런 변화를 시도했지만 여전히 불행하게도 같은 결과를 얻었습니다. – notchopra

+0

트리플이 같음은 엄격한 비교입니다. 'SOUND_CREATED_SUCCESSFULLY'가 올바르게 설정되어 있지 않으면, 모든 타입 변환에 이중 등호를 사용할 수 있습니다. '=='. – Craig

관련 문제