【问题标题】:Using a stored procedure in Laravel 4在 Laravel 4 中使用存储过程
【发布时间】:2014-03-19 20:56:27
【问题描述】:

我正在尝试通过 laravel 路由调用存储过程,但我不断收到错误消息:

{"error":{"type":"Illuminate\\Database\\QueryException","message":"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'emailAddress' in 'field list' (SQL: CALL getLibraryList(emailAddress))",

我相信我打的电话是正确的:

$result = DB::statement('CALL getLibraryList('.$email.')');
return $result;

【问题讨论】:

    标签: stored-procedures laravel-4


    【解决方案1】:

    找到了让这个工作的方法here

    $result = DB::select('call getLibraryList(?)',array($email));
    

    【讨论】:

    • 这并不完全有效,因为您没有检索特定的类,您会得到一个 stdClass 对象。
    • 如果我还有 3 个其他输出参数该怎么办
    • 替代方案是:$result = DB::select(DB::raw("CALL retrieve_bill_home(:user_id)"), array( 'user_id' => $user_id ));
    • @gin93r 也许你可以帮助我。看看这个:stackoverflow.com/questions/51838922/…
    【解决方案2】:

    执行它们可能会遇到一些麻烦。以下是一些选项:

    DB::statement(DB::raw('CALL getLibraryList('.$email.');'));
    

    或者

    DB::select('CALL getLibraryList(?)',array($email));
    

    还有,最脏的一个:

    $db = DB::connection();
    
    $stmt = $db->pdo->prepare("CALL getLibraryList(?)");
    
    $stmt->bindParam(1, $email);
    $stmt->execute();
    
    $search = array();
    
    do {
        $search = $stmt->fetchAll(PDO::FETCH_CLASS, 'stdClass');
    } while ($stmt->nextRowset());
    

    【讨论】:

    • 结果相同。我实际上之前尝试过 - 尽管我之前没有分号。仍然 - 结果相同。
    • 感谢@Antonio 的帮助我找到了答案。 :)
    • @Antonio Carlos Ribeiro 也许你可以帮助我。看看这个:stackoverflow.com/questions/51838922/…
    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多