![](/img/trans.png)
[英]Implicit conversion from data type varchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query
[英][SQL Server]Implicit conversion from data type nvarchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query
那是我的代碼
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)?
我可以想到三種可能性。 最簡單的方法是創建一個外殼存儲過程(例如dbo.SP_WS_CUST_MAIN_VC
),該過程簡單地接受參數,包括將$value
用作varchar(max),然后將$value
轉換為varbinary(max)
並調用存儲的目標程序。 這樣可以確保在參數替換中引用正確。
第二種方法(也是最危險的方法)是將CONVERT
直接嵌入參數中,從而使您容易遭受各種SQL注入的麻煩。
第三個是創建一個接受varchar(max)
並返回varbinary(max)
的UDF,並將其嵌入到基本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)也應該是安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.