【发布时间】:2015-12-14 21:50:36
【问题描述】:
我正在尝试使用 Slim 框架调用我在 MySQL 中创建的函数。 这是我在 DBHandler.php 中的函数:
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函数。
【问题讨论】:
-
嘿@Tiago,欢迎来到 S.O.当您直接在数据库中执行该查询时,该查询是否正确运行?您是否尝试过调试
$stmtvar 的内容?您可以在声明行之后添加var_dump($stmt)来执行此操作。顺便说一句,我假设您使用的是 MySQLi,对吗? -
sincronizar 是函数、表还是过程?
-
@NorbertvanNobelen
sincronizar()是一个返回 char(50) 的函数。 -
嗨@GustavoStraube,是的,我正在使用MySQLi。我尝试按照您的建议调试 $stmt var 的内容,它返回一个 bool(false)。如果我在调用我的 SQL 函数时将 SQL 语句更改为
CALL sincronizar()而不是SELECT sincronizar(),它将返回以下内容:object(mysqli_stmt)#40 (10) { ["affected_rows"]=> int(0) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(3) ["field_count"]=> int(0) ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["sqlstate"]=> string(5) "00000" ["id"]=> int(1) } {"error":false,"message":false} -
@TiagoPires,我认为您必须在查询中将
SELECT替换为CALL。之后,你如何检查函数是否正在执行?你的功能是做什么的?它是否会更改您表中的某些数据?
标签: php mysql stored-procedures pdo slim