You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中启用SQLite3扩展加载以使用JSON1扩展?

解决PHP中SQLite3加载JSON1扩展的问题

遇到这个警告太正常了——SQLite3出于安全考量,默认是禁用扩展加载的,咱们可以通过两种靠谱的方式解决这个问题:

方法一:在PHP代码中启用扩展加载并加载json1.dll

PHP的SQLite3类已经封装了对应的启用方法,跟着步骤来就行:

  • 创建SQLite3连接后启用扩展加载
    先实例化SQLite3对象,然后调用enableLoadExtension()方法开启扩展加载功能:

    $db = new SQLite3('your_database.db');
    // 启用扩展加载
    $db->enableLoadExtension(true);
    
  • 加载json1.dll扩展
    接下来调用loadExtension()方法加载你编译好的json1.dll,这里一定要注意路径的正确性:

    • 如果json1.dll和你的PHP脚本在同一目录,直接写文件名即可;
    • 更稳妥的是使用绝对路径,比如:
    // 替换成你实际的dll路径
    $db->loadExtension('C:\\test\\ext\\json1.dll');
    

    注意Windows路径里的反斜杠要转义成双反斜杠,或者直接用正斜杠/替代。

  • 验证是否加载成功
    可以执行一条简单的JSON相关SQL语句测试一下:

    $result = $db->query("SELECT json('{\"name\": \"test\"}')");
    var_dump($result->fetchArray());
    

    如果能正常返回JSON解析后的结果,说明扩展已经加载成功了。

方法二:静态编译JSON1到SQLite(无需加载dll)

如果不想每次运行脚本都加载dll,还可以一劳永逸:在编译SQLite的时候直接把JSON1扩展静态编译进去,这样PHP使用的SQLite就自带JSON1功能了:

  • 编译SQLite时加上-DSQLITE_ENABLE_JSON1编译选项,之后重新编译PHP的SQLite3扩展,或者直接使用包含该选项的预编译SQLite库。
  • 这种方式既避免了加载扩展的安全风险,也不用再操心路径和权限问题。

额外注意事项

  • 32/64位匹配:一定要确保你编译的json1.dll和你的PHP版本(32位或64位)完全一致,否则肯定会加载失败。
  • PHP安全设置:检查php.ini中的disable_functions配置,确保没有禁用SQLite3::enableLoadExtension和SQLite3::loadExtension这两个方法。
  • 文件权限:Windows环境下要保证PHP进程有读取json1.dll文件的权限,不然也会加载失败。

内容的提问来源于stack exchange,提问作者Nigel Alderton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:39:25