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

Symfony 3+Behat 3直写Oracle SQL遇OCI_COMMIT_ON_SUCCESS未定义错误求助

解决Behat Context中OCI_COMMIT_ON_SUCCESS未定义的错误

你遇到的问题核心其实是Behat运行的PHP环境没加载OCI8扩展——虽然你的Symfony控制器和常规CLI命令行能正常用OCI扩展,但Behat大概率在另一个PHP配置上下文里跑。下面是具体的排查和解决步骤:

1. 先确认Behat的PHP环境是否真的加载了OCI8

在你的UserSetupContext.php里临时加一段调试代码,比如随便找个步骤方法插入:

/**
 * @Given 我要检查Oracle扩展状态
 */
public function iCheckOracleExtensionStatus()
{
    // 直接打印OCI扩展是否加载
    var_dump(extension_loaded('oci8'));
    // 列出所有已加载的扩展,方便排查
    print_r(get_loaded_extensions());
    // 查看当前PHP用的配置文件路径
    phpinfo();
    exit;
}

然后运行对应的Behat场景,看输出:

  • 如果extension_loaded('oci8')输出bool(false),实锤Behat的PHP环境没加载扩展
  • 找到Loaded Configuration File这一行,对比你平时修改的php.ini路径,大概率不是同一个文件

2. 修正Behat对应的PHP配置

如果发现Behat用的是另一个php.ini:

  • 打开这个配置文件,找到extension=oci8(或者对应版本的extension=oci8_12c),去掉前面的注释符号;
  • 保存后重新运行Behat场景,验证扩展是否加载成功

3. 检查Behat调用的PHP可执行文件

有时候系统里装了多个PHP版本,Behat调用的不是你配置过的那个:

  • 在终端跑which php,得到当前默认PHP路径
  • 再跑php -m | grep oci8,看能不能找到oci8扩展
  • 如果找不到,要么修改这个PHP对应的php.ini,要么强制指定Behat用正确的PHP路径运行:
    /path/to/your/correct/php/bin/php vendor/bin/behat
    

4. 特殊情况:Behat Phar包或自定义启动脚本

如果你用的是Behat的Phar包,或者有自定义启动脚本,要确认这些脚本有没有用-c参数指定其他php.ini,有的话改成正确的配置文件路径就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:18:14