【发布时间】:2017-08-04 07:08:25
【问题描述】:
我经常创建这样的 API:
public function getUserInfo($id) {
$stmt = $this->conn->prepare("SELECT id, email FROM users WHERE id = ? ");
$result = array();
$stmt->bind_param("s", $id);
$stmt->execute();
$stmt->bind_result($id, $email);
$stmt->fetch();
$result['id'] = $id;
$result['email'] = $email;
return $result;
}
但是,我需要使用程序开发 API。并且我的代码不起作用。
public function getUserInfo($id) {
$stmt = $this->conn->prepare("call getUser( ? )");
$result = array();
$stmt->bind_param("s", $id);
$stmt->execute();
$stmt->bind_result($id, $email); // error here
$stmt->fetch();
$result['id'] = $id;
$result['email'] = $email;
return $result;
}
在这种情况下,我需要做什么才能获取 id 和电子邮件?
【问题讨论】:
-
为什么要为简单的
SELECT调用创建存储过程?这通常是非常浪费的并且非常适得其反。打个电话就行了。像你所做的那样将它包装在一个函数中。这是最好的计划。 -
我简单总结了一下情况。实际过程更复杂。
-
你能描述一下你的情况究竟是什么不工作。是否有错误消息,或者至少是 WSOD?
-
这在使用“SELECT * FROM users”等简单查询时也是一个问题。我不知道如何读取选择查询中未指定的参数..
-
您确实应该保留存储过程,以应对其他查询因复杂的计算而变得混乱并且没有其他方法可以简化它们的情况,而且这些函数包含的逻辑将来不太可能改变。这里的一个经典示例是 GIS 函数,用于计算地球 3D 表面上的距离,而不是笛卡尔距离。你只是在这里做一个
CALL,所以我认为你过度设计了这个。