【发布时间】:2020-11-04 03:27:57
【问题描述】:
我很难绑定我的 SQL 查询,我只剩下几个脑细胞。
基本上,这段代码可以工作,但容易发生 SQL 注入:
return DB::connection('sqlsrv_rfo_user')
->table('dbo.tbl_rfaccount')
->insert([
'Email' => $email,
'id' => DB::raw("CONVERT(binary, '$username')"),
'password' => DB::raw("CONVERT(binary, '$password')"),
'birthdate' => $birthday,
'accounttype' => 0,
'BCodeTU' => 1
]);
我想弄清楚如何绑定这些代码行:
'id' => DB::raw("CONVERT(binary, '$username')"),
'password' => DB::raw("CONVERT(binary, '$password')"),
我确实尝试过:
'id' => DB::raw("CONVERT(binary, ?)", [$username]),
'password' => DB::raw("CONVERT(binary, ?)", [$password]),
得到了这个错误:
SQLSTATE[07002]: [Microsoft][ODBC Driver 13 for SQL Server]COUNT field incorrect or syntax error (SQL: insert into [dbo].[tbl_rfaccount] ([Email], [id], [password], [birthdate], [accounttype], [BCodeTU]) values (user@example.com, CONVERT(binary, 2011-11-11 00:00:00), CONVERT(binary, 0), 1, ?, ?))
还有这个:
'id' => DB::raw("CONVERT(binary, :username)", ['username' => $username]),
'password' => DB::raw("CONVERT(binary, :password)", ['password' => $password]),
得到了这个错误:
SQLSTATE[IMSSP]: An error occurred substituting the named parameters. (SQL: insert into [dbo].[tbl_rfaccount] ([Email], [id], [password], [birthdate], [accounttype], [BCodeTU]) values (user@example.com, CONVERT(binary, :username), CONVERT(binary, :password), 2011-11-11 00:00:00, 0, 1))
如果我尝试完整的原始:
return DB::connection('sqlsrv_rfo_user')
->insert("
INSERT INTO [dbo].[tbl_rfaccount]
([id]
,[password]
,[accounttype]
,[birthdate]
,[BCodeTU]
,[Email])
VALUES
((CONVERT(binary, ?)), (CONVERT(binary, ?)), ?, ?, ?, ?)
", [$username, $password, 0, $birthday, 1, $email]);
我收到此错误:
SQLSTATE[22001]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]String or binary data would be truncated. (SQL: INSERT INTO [dbo].[tbl_rfaccount] ([id] ,[password] ,[accounttype] ,[birthdate] ,[BCodeTU] ,[Email]) VALUES ((CONVERT(binary, user01)), (CONVERT(binary, password01)), 0, 2011-11-11 00:00:00, 1, user@example.com)
我从开始学习 Laravel 开始就一直在使用 Eloquent,但是我有一个项目迫使我使用这些编码方式,所以我别无选择。
【问题讨论】:
-
第一次尝试是正确的,除了数组需要在问号之外。
DB::raw("CONVERT(binary, ?)", [$username]) -
@aynber 是的,抱歉,这只是一个错字,我现在要编辑问题,这正是我的代码的真实样子,但仍然无法正常工作。
-
数据似乎存在一些问题。对于 ID,您似乎在传递
CONVERT(binary, 2011-11-11 00:00:00),密码是CONVERT(binary, 0)。 -
我实际上试图弄清楚为什么会发生这种情况仍然找不到正确的方法。
-
很公平,所以它是
varchar... 但varchar的长度是多少?create table tbl_refaccount (id varchar(what goes here?), ...)。我们确实需要查看tbl_rfaccount的表定义,即列数据类型。
标签: php sql sql-server laravel sqlsrv