Php 使用laravel DB::语句创建MYSQL事件

Php 使用laravel DB::语句创建MYSQL事件,php,mysql,laravel-5.8,Php,Mysql,Laravel 5.8,这个问题涉及使用PHP变量绑定处理MySQL查询的Laravels DB::语句函数,而不是可能的副本中发现的PHP的PDO绑定过程。Laravel eloquent在后端使用PDO,但DB::statement函数的结构与PDO方法中的不同 当一个条目保存到数据库时,我试图让我的控制器的存储函数创建一个mysql事件。提交表单时,Laravel抛出错误 'SQLSTATE[HY093]:无效参数编号:绑定变量的数量与令牌的数量不匹配(SQL:CREATE EVENT test ON SCHED

这个问题涉及使用PHP变量绑定处理MySQL查询的Laravels DB::语句函数,而不是可能的副本中发现的PHP的PDO绑定过程。Laravel eloquent在后端使用PDO,但DB::statement函数的结构与PDO方法中的不同

当一个条目保存到数据库时,我试图让我的控制器的存储函数创建一个mysql事件。提交表单时,Laravel抛出错误

'SQLSTATE[HY093]:无效参数编号:绑定变量的数量与令牌的数量不匹配(SQL:CREATE EVENT test ON SCHEDULE每隔5分钟更新一次寻呼机集escalation\u level=escalation\u level+1,其中id=:issue)'

我正在尝试重新创建以下MySQL查询

CREATE EVENT test ON SCHEDULE EVERY 5 MINUTE DO UPDATE issues SET escalation_level = escalation_level + 1 WHERE id = 'Rd8409347-70bb-4e3e-b351-b49c10ce9a2a';
在我看来,查询中似乎有一个变量,然后数组传递了一个变量,所以我似乎无法使查询成功。下面是表单提交给的控制器。 谢谢你的帮助

IssueController.php

  public function store(Request $request)
{
    //Validate Input
    $request->validate([
       'company_id' => 'string|max:255',
       'message' => 'required|string|max:255' 
    ]);

    //Once the form input has passed validation add input to the database

    $issueData = new Issue();
    $issueData->id = "R" . Uuid::generate(4)->string;
    $issueData->company_id = $request->company_id;
    $issueData->first_name = Auth::user()->first_name;
    $issueData->last_name = Auth::user()->last_name;
    $issueData->user_id = Auth::user()->id;
    $issueData->message = $request->message;


    //Create MySQL event to increment escalation level
    //Event will be named equal to the new page 'R' ID
    //That has just been generated.

    DB::statement('CREATE EVENT test ON SCHEDULE EVERY 5 MINUTE DO UPDATE issues SET escalation_level = escalation_level + 1 WHERE id = :issue_id', array('issue_id' => $issueData->id));

    $issueData->save();

    return redirect('home')->with('status', ['Message sent successfully.', 
        'You can monitor the status of your message from Check Status section']);

}

我在SO帖子的帮助下发现了这个问题。Laravel中的一些查询需要使用未准备好的语句。我可以使用DB::unprepared解决这些问题,如下所示:

        DB::unprepared('CREATE EVENT event_name ON SCHEDULE EVERY 5 MINUTE DO UPDATE issues SET escalation_level = escalation_level + 1 WHERE id = ' . '/'' . $issueData->id . '/'');

@这似乎不是一个有效的副本。OP正在发布要绑定的值,并对此进行了一些雄辩的推理。并不是说在这个网站上没有特定于laravel的dupe,但是一般的PDO在这里并不适用。