【问题标题】:Missing argument 2 for {closure}();{closure}() 缺少参数 2;
【发布时间】:2014-11-01 13:56:51
【问题描述】:

我正在使用 Slim 框架处理我的 RESTful Web 服务,当我尝试从 3 个表中获取数据时出现此错误。

这是我课堂上的函数:

public function getCard($card_id, $card_type_id, $user_id) {
    $stmt = $this->conn->prepare("SELECT uc.id, c.card_name, ct.category, c.card_desc, c.card_picture ,c.status, c.created_at from cards c, user_cards uc, cards_type ct WHERE c.card_type_id = ct.card_type_id AND c.card_id = uc.card_id AND uc.user_id = ?");

    if ($stmt == FALSE) {
        die($this->conn->error);
    } else {
        $stmt->bind_param("iii", $card_id, $card_type_id, $user_id);
        if ($stmt->execute()) {
            $res = array();
            $stmt->bind_result($id, $card_name, $category, $card_desc, $card_picture, $status, $created_at);

            $stmt->fetch();
            $res["id"]           = $id;
            $res["card_name"]    = $card_name;
            $res["category"]     = $category;
            $res["card_desc"]    = $card_desc;
            $res["card_picture"] = $card_picture;
            $res["status"]       = $status;
            $res["created_at"]   = $created_at;
            $stmt->close();
            return $res;
        } else {
            return NULL;
        }
    }
}

这是 index.php 中的代码:

$app->get('/cards/users/:card_id', 'authenticate', function($card_id, $card_type_id) {
    global $user_id;
    $response = array();
    $db       = new Card();

    // fetch card
    $result = $db->getCard($card_id, $card_type_id, $user_id);

    if ($result != NULL) {
        $response["error"]        = false;
        $response["id"]           = $result["id"];
        $response["card_name"]    = $result["card_name"];
        $response["category"]     = $result["category"];
        $response["card_desc"]    = $result["card_desc"];
        $response["card_picture"] = $result["card_picture"];
        $response["status"]       = $result["status"];
        $response["createdAt"]    = $result["created_at"];
        echoRespnse(200, $response);
    } else {
        $response["error"]   = true;
        $response["message"] = "The requested resource doesn't exists";
        echoRespnse(404, $response);
    }
});

我写错了吗?

【问题讨论】:

    标签: php web-services rest slim


    【解决方案1】:

    看看这一行:

    $stmt = $this->conn->prepare("SELECT uc.id, c.card_name, ct.category, c.card_desc, c.card_picture ,c.status, c.created_at from cards c, user_cards uc, cards_type ct WHERE c.card_type_id = ct.card_type_id AND c.card_id = uc.card_id AND uc.user_id = ?");
    

    查询可能很难看到,所以我将只格式化查询:

    SELECT uc.id, 
           c.card_name, 
           ct.category, 
           c.card_desc, 
           c.card_picture, 
           c.status, 
           c.created_at 
    FROM   cards c, 
           user_cards uc, 
           cards_type ct 
    WHERE  c.card_type_id = ct.card_type_id 
           AND c.card_id = uc.card_id 
           AND uc.user_id = ? 
    

    注意它只有一个问号,表示你应该只绑定一个参数到你准备好的语句。

    所以你应该改变这一行:

    $stmt->bind_param("i", $user_id); //have only one argument
    

    【讨论】:

    • 我已经尝试过你的方法,但我也出错了,因为我在课堂上写了这段代码:public function getCard($card_id, $card_type_id, $user_id) {
    • 查看查询,只有一个问号,所以只能绑定一个参数。看看这是否有效。
    • 已经解决了 :) 我也添加了这个查询 'uc.id = ?' :) 谢谢你帮助我 :)
    猜你喜欢
    • 2015-01-06
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2014-01-10
    • 2023-03-22
    相关资源
    最近更新 更多