2015-09-17 81 views
1

我想調用我在MySQL中使用Slim框架創建的函數。 這是我在DBHandler.php功能:從Slim框架調用Mysql函數

public function validarSincronismo($pCnpj, $pLogin, $pImei){ 
    $stmt = $this->conn->prepare("SELECT sincronizar(?,?,?)"); 
    $stmt->bind_param("sss", $pCnpj, $pLogin, $pImei); 
    $result = $stmt->execute(); 
    $stmt->close(); 
    return $result; 
} 

這是我的index.php功能:

$app->post('/validar', function() use ($app) { 
    $db = new DbHandler(); 
    $cnpj = $app->request->post('cnpj');  
    $login = $app->request->post('login'); 
    $imei = $app->request->post('imei'); 
    $msg = $db->validarSincronismo($cnpj, $login, $imei);     
    $response["error"] = false; 
    $response["message"] = $msg; 
    echoRespnse(201, $response); 
}); 

而且我發現了以下錯誤在phperror.log

[17-Sep-2015 21:12:37 UTC] PHP Fatal error: Call to a member function execute() on boolean in C:\MAMP\htdocs\test\include\DbHandler.php on line 69 

我試過使用CALL sincronizar(?,?,?);但它不執行SQL函數。

+0

嘿@Tiago,歡迎S.O.在數據庫中直接執行該查詢時,該查詢是否正確運行?你試過調試'$ stmt' var的內容嗎?您可以在聲明行之後添加'var_dump($ stmt)'來執行此操作。順便說一句,我假設你正在使用MySQLi,對嗎? –

+0

sincronizar是函數,表或過程嗎? –

+0

@NorbertvanNobelen'sincronizar()'是一個返回char(50)的函數。 –

回答

1

感謝@GustavoStraube和@NorbertvanNobelen抽出時間和展望我的問題!我可以使用SELECT sincronizar()來調用我的SQL函數。問題是我在錯誤的數據庫中創建了這個函數。我的錯! :/

所以我最終和工作代碼如下:

功能的DBHandler.php中的index.php

public function validarSincronismo($pCnpj, $pLogin, $pImei){ 
    $stmt = $this->conn->prepare("SELECT sincronizar(?,?,?)"); 
    $stmt->bind_param("sss", $pCnpj, $pLogin, $pImei); 
    $stmt->execute(); 
    $stmt->bind_result($result); 
    $stmt->fetch(); 
    $stmt->close(); 
    // Returns a message 
    return $result; 
} 

功能

$app->post('/validar', function() use ($app) { 
      $db = new DbHandler(); 
      $cnpj = $app->request->post('cnpj');  
      $login = $app->request->post('login'); 
      $imei = $app->request->post('imei'); 
      $msg = $db->validarSincronismo($cnpj, $login, $imei);     
      $response["error"] = false; 
      $response["message"] = $msg; 
      echoResponse(201, $response); 
     });