这是我以前遇到过的一个奇怪的事。我正在研究的Laravel 4站点最近被部署到运行IIS / PHP 5.5.11的生产服务器上。在我开始发布表单之前,一切看起来都很棒。我开始收到错误,例如:
Next exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column '/admin/settings/1' in 'field list' (SQL: update `settings` set `updated_at` = 2015-07-17 08:40:41, `/admin/settings/1` = where `id` = 1)' in C:\{application_directory}\vendor\laravel\framework\src\Illuminate\Database\Connection.php:625
经过一番挖掘后,我发现PHP $ _GET超全局变量在我的应用程序中的每个页面请求中都包含路径作为索引。例如,我转出了我的设置管理页面的索引视图并收到了:
Array
(
[/admin/settings] =>
)
当然,我在所有表单帖子中使用Laravel的Input::all()
,它们同时引入了$ _GET / $ _ POST变量的组合,因此当它尝试运行更新查询时,还有一个额外的索引(没有价值)正在通过。
有什么想法吗?我已经检查了IIS的重写模块,PHP设置,执行了大量的Google搜索以获取其他信息,而且我的选项用完了。
答案 0 :(得分:0)
我想简单地问这个问题的本质有助于我的思想朝着正确的方向发展。在任何情况下,答案都在IIS的web.config中的URL Rewrite设置中。原来输入的一般重写规则设置如下:
<action type="Rewrite" url="/index.php?/{R:1}" appendQueryString="false" />
我正在查看所有重写规则(我的开发/测试服务器都使用Apache&amp; mod_rewrite,所以这与我不同)。最后,关于setting up laravel on IIS7
,我在SO上发现了这个非常有用的问题将它们的设置与此设置进行比较,我注意到上面提到的行中存在差异,即?
。对我来说很明显,网址重写导致了这个特定索引的注入。
无论如何,感谢发声板SO!