int sqlite3_load_extension( sqlite3 *db, /* Load the extension into this database connection */ const char *zFile, /* Name of the shared library containing extension */ const char *zProc, /* Entry point. Derived from zFile if 0 */ char **pzErrMsg /* Put error message here if not 0 */ );
此介面從指定的檔案載入 SQLite 擴充程式庫。
sqlite3_load_extension() 介面嘗試載入 zFile 檔案中包含的 SQLite 擴充功能 程式庫。如果無法直接載入該檔案,則會嘗試載入各種作業系統特定的副檔名。例如,如果無法載入「samplelib」,則可能會嘗試載入「samplelib.so」、「samplelib.dylib」或「samplelib.dll」等名稱。
進入點為 zProc。zProc 可以是 0,在這種情況下,SQLite 會自行嘗試找出進入點名稱。它首先嘗試「sqlite3_extension_init」。如果該名稱無效,它會建構一個名稱「sqlite3_X_init」,其中 X 由檔案名稱中最後一個「/」到第一個「.」之間的所有 ASCII 字母字元的小寫字母組成,並省略任何開頭的「lib」。sqlite3_load_extension() 介面在成功時返回 SQLITE_OK,如果發生錯誤則返回 SQLITE_ERROR。如果發生錯誤且 pzErrMsg 不是 0,則 sqlite3_load_extension() 介面應嘗試使用從 sqlite3_malloc() 獲得的記憶體中儲存的錯誤訊息文字填入 *pzErrMsg。呼叫函式應透過呼叫 sqlite3_free() 來釋放此記憶體。
在呼叫此 API 之前,必須使用 sqlite3_enable_load_extension() 或 sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION,1,NULL) 啟用擴充功能載入,否則將返回錯誤。
安全性警告:建議使用 SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 方法僅啟用此介面。應避免使用 sqlite3_enable_load_extension() 介面。這將保持 SQL 函式 load_extension() 被停用,並防止 SQL 注入讓攻擊者存取擴充功能載入功能。
另請參閱 load_extension() SQL 函式。