ODBC 函式庫通常提供建立參數化查詢的功能,將查詢和參數分別傳遞到資料庫。這基本上消除了 SQL 注入攻擊的風險,而且從程式設計的角度來看也非常方便。由於 JMP 具有 ODBC 查詢,因此它還應該具有參數化查詢,以便您可以執行以下操作:
Execute SQL(database,
"Select * from Employees where Name like ? and Status=?",
"BobList",
{"Bob", "Active"}
);pyodbc 的參數化查詢:
https://github.com/mkleehammer/pyodbc/wiki/Getting-started#parameters
.NET生態系的參數化查詢:
https://docs.microsoft.com/en-us/dotnet/api/system.data.odbc.odbccommand.parameters?redirectedfrom=MSDN&view=dotnet-plat-ext-5.0#System_Data_Odbc_OdbcCommand_Parameters
我認為您可以使用命名查詢來實現這一點:建立命名查詢()和執行命名查詢()。在底層,這些函數將使用 ODBC SQLPrepare()、SQLBindParameter() 和 SQLExecute() 函數。 Create Named Query() 函數將採用 SQL 語句和參數。它將傳回一個命名查詢物件。執行命名查詢() 會將資料庫連接物件、命名查詢物件和參數值作為輸入,並將 SQL 結果作為資料表傳回(如果需要)。資料庫連接物件可以是建立函數而不是執行函數的輸入。這種方法的好處是,創建可以在腳本初始化時進行,將執行部分分開,這可能會更有效。
我也希望能有類似的東西,至少能夠分別傳遞 SQL 連接和查詢參數,以便更輕鬆地進行單元測試。例如,在測試包含 SQL 查詢的函數時,可以輕鬆地將連線替換為本機 JMP 表。