SQLite C 接口
加载扩展
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 注入使攻击者能够访问扩展加载功能。