2015-09-17 120 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); 
     });