从 Slim 框架调用 Mysql 函数
Posted
技术标签:
【中文标题】从 Slim 框架调用 Mysql 函数【英文标题】:Call Mysql function from Slim Framework 【发布时间】: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.当您直接在数据库中执行该查询时,该查询是否正确运行?您是否尝试过调试$stmt
var 的内容?您可以在声明行之后添加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
。之后,你如何检查函数是否正在执行?你的功能是做什么的?它是否会更改您表中的某些数据?
【参考方案1】:
感谢@GustavoStraube 和@NorbertvanNobelen 花时间调查我的问题!我能够使用SELECT sincronizar()
调用我的SQL 函数。问题是我在错误的数据库中创建了函数。我的错! :/
所以我的最终和工作代码如下所示:
DBHandler.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;
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;
echoResponse(201, $response);
);
【讨论】:
以上是关于从 Slim 框架调用 Mysql 函数的主要内容,如果未能解决你的问题,请参考以下文章