0

那是我的代码

DB::statement(DB::raw('EXECUTE dbo.SP_WS_CUST_MAIN ?,?,?,?,?,?,?'),
    [ $USER_ID, $CUST_PYMT_MTHD, $CUST_CMMNT, $CUST_NAME, $ANDROID_LOCATION,
      DB::raw("CONVERT(VARBINARY(MAX), $value)") , $WEEKDAY]
);

如何将 nvarchar(max) 转换为 varbinary(max)?

4

1 回答 1

0

我能想到三种可能。最简单的方法是创建一个 shell 存储过程(比如dbo.SP_WS_CUST_MAIN_VC),它只接受参数,包括$valuevarchar(max),然后转换$value为 avarbinary(max)并调用目标存储过程。这可以确保正确引用参数替换。

第二个(也是最危险的)是直接将 嵌入CONVERT到参数中,让自己面对各种 SQL 注入的丑陋。

第三个是创建一个接受 avarchar(max)并返回 a的 UDF,并将其varbinary(max)嵌入到基本EXECUTE调用中,例如:

DB::statement(DB::raw('EXECUTE dbo.SP_WS_CUST_MAIN ?,?,?,?,?,dbo.castAsVarbinary(?),?'),
    [ $USER_ID, $CUST_PYMT_MTHD, $CUST_CMMNT, $CUST_NAME, $ANDROID_LOCATION,
      DB::raw("CONVERT(VARBINARY(MAX), $value)") , $WEEKDAY]
);

这些中的任何一个都可以,但是(1)和(3)也应该是安全的。

于 2017-03-21T22:27:16.533 回答