我目前遇到麻烦...
if (Input::has('numenr') and Input::has('table') and Input::has('type') and Input::has('st')) {
$sql_up = "UPDATE [wds].[dbo].[?] SET [f_nonvint] = ? WHERE [numenr] = '?' AND [f_type] = ?";
DB::connection('sqlsrv')->update($sql_up, [Input::get('table'), Input::get('st'), Input::get('numenr'), Input::get('type')]);
}
错误输出为:
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens (SQL: UPDATE [wds].[dbo].[f_files_wines] SET [f_nonvint] = 1 WHERE [numenr] = '091DFF89-EB1B-4B81-9BF0-4AB36F65529E' AND [f_type] = 1)
给出的查询看起来很好,我不明白它来自何处。
感谢您的帮助! :)
更新:
先前的错误是通过一个小技巧修复的。问题出在uniqueidentifier上。我无法在sql中添加引号......不知道为什么。 有修复:
if (Input::has('numenr') and Input::has('table') and Input::has('type') and Input::has('st')) {
$sql_up = "UPDATE [wds].[dbo].[?] SET [f_nonvint] = ? WHERE [numenr] = ? AND [f_type] = ?";
DB::connection('sqlsrv')->update($sql_up, [Input::get('table'), Input::get('st'), "'".Input::get('numenr')."'", Input::get('type')]);
}
但现在我遇到了一个更奇怪的问题。
SQLSTATE[HY000]: General error: 208 General SQL Server error: Check messages from the SQL Server [208] (severity 16) [(null)] (SQL: UPDATE [wds].[dbo].[t_files_wines] SET [f_nonvint] = 1 WHERE [numenr] = '7AEDE4A0-0109-4729-8AFE-D4A55A0A5893' AND [f_type] = 2)
但事实是当我将查询复制到SqlServer时,我没有错! :(
答案 0 :(得分:1)
你不能参数化表名本身(你必须直接将它添加到sql语句中)。
此行为的原因之一是,SQL Server根据传输的SQL语句构建其查询计划。但是,如果它不知道应该使用哪个表,它应该如何构建查询计划。这就像我希望你告诉我的那样,你需要多长时间从工厂带我一些零件,但不要告诉你哪个工厂(可能是街上的小工厂或世界各地的另一半工厂)
答案 1 :(得分:0)
我使用DB :: statement([MY SQL UPDATE])解决了它... 不知道为什么它不起作用...... 我可以使用Eloquent,但我有一个约束来保持更多的SQL。
无论如何,谢谢你们。