我已经重写了我的网站PHP代码并添加了MySQL存储过程。
在我的本地版本中一切正常,但是在将网站上传到托管服务器后,我不断地收到致命错误“Prepared statement needs to be re-prepared”。
有时页面可以加载,有时加载失败并出现此错误。这是什么原因?
我尝试运行一个连接视图和表的UPDATE查询,结果遇到了同样的错误。由于我没有用户输入,所以我决定运行DB::unprepared
来解决这个问题。
您可以在Laravel文档中阅读更多相关信息。
private function myView(){
return DB::raw('(**definition of the view**) my_view_name)');
}
然后像这样使用它:
public function scopeMyTable(Builder $query)
{
return $query->join($this->myView(),'my_view_name.id','=','some_table.id');
}
这是一个 Laravel 的方法,但我相信它可以应用于大多数情况,并且不需要进行大量的代码重构或架构更改。此外,由于您的语句保持准备状态,因此它相对安全。
我在共享托管环境中使用Ruby on Rails时遇到了同样的错误。这可能不是最安全的解决方案,但禁用预处理语句可以为我消除错误消息。
您可以通过将"prepared_statements: false"设置添加到您的database.yml文件来实现此目的:
production:
prepared_statements: false