这个问题涉及到使用PHP变量绑定的MySQL查询的语句函数处理,而不是可能重复的here的PDO绑定过程。Laravel雄辩地在后端使用PDO,但是DB::statement函数的结构与PDO方法中的方法不同。
我正在尝试让我的控制器的存储函数在将条目保存到数据库时创建一个mysql事件。提交表单时,Laravel将抛出错误。
'SQLSTATEHY093:无效的参数号:绑定变量的数量与令牌的数量不匹配(SQL:每5分钟按计划创建事件测试,进行更新寻呼机设置escalation_level = escalation_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']);
}
发布于 2019-06-07 07:33:36
我在SO post here的帮助下发现了这个问题。Laravel中的一些查询需要使用未准备好的语句。我能够通过使用DB::Un准备解决这些问题,如下所示:
DB::unprepared('CREATE EVENT event_name ON SCHEDULE EVERY 5 MINUTE DO UPDATE issues SET escalation_level = escalation_level + 1 WHERE id = ' . '/'' . $issueData->id . '/'');
https://stackoverflow.com/questions/56484626
复制相似问题