【问题标题】:PHP rest API with call procedure [closed]带有调用过程的 PHP REST API [关闭]
【发布时间】: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,所以我认为你过度设计了这个。

标签: php mysql rest


【解决方案1】:

如果您还想要列名,请不要调用fetch(),请调用fetch_row()

$result = $stmt->fetch_row();

您可以从该结构中删除任何不必要的列,或添加您想要的任何其他字段。

【讨论】:

  • 感谢您的回答!你的回答对我很有帮助。我尝试了各种方式获取并成功了。我终于解决了 $conn->store_result()->fetch_assoc();
  • 请记住,其中一些步骤可能会失败,因此请务必enable exceptions,以免错过错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多