PHPUnit,致命错误:找不到“mysqli”类

3

我有一个类似于这里描述的问题:

无论我是从命令行界面还是从Web浏览器运行代码,一切都按照我的预期工作;都可以访问数据库并打印输出。但是当我在PHPUnit中使用Eclipse运行它时,就会出现错误:

Multiple annotations found at this line:
    - Fatal error: Class 'mysqli' not found
    - Occurrence of 'connection'

指向以下行:

这段代码会打印出 'Yes'。

$connection = new \mysqli(HOST, USER, PASS, DATABASE);

if (extension_loaded('mysqli')) {
    echo "Yes";
}
else {
    echo "No";
}

需要指出的一点是,我在包含上述代码的类中使用了自己的命名空间。我的单元测试位于全局命名空间。

我按照上面链接中的步骤进行操作,但是可惜没有成功。:(

在命令提示符上运行此命令不会出现错误:

php -r "new mysqli();"

请问有人可以帮我理解这里的问题吗?


1
为什么在mysqli之前要加反斜杠? - Ron van der Heijden
因为没有反斜杠,它会认为mysqli是我的命名空间内的一个函数。 - Mr Goobri
1个回答

0

我不确定您是否已经正确配置了php.ini文件的路径,无论是DLL还是共享对象(.so)文件。如果您正在使用Unix/Linux,请尝试在命令行上运行以下命令:

$> php -i | grep mysqli

查看是否有安装提示,或创建一个PHP脚本

<?php phpinfo(); ?>

运行该脚本并检查是否已正确加载。如果您确信已经安装了它,请尝试通过检查php.ini文件中的“extension”部分来确认是否已正确加载。

在运行PHPUnit时,还要检查是否在命令行中运行,因为在Web模式下运行时,php.ini的路径可能与在命令行中运行时不同。


  1. 我认为mysqli已经正确安装了。它在phpinfo中存在;我可以从Web界面访问数据库;我可以从命令行提示符访问数据库。
  2. 我不确定我是否有两个不同的php.ini文件。whereis php.ini只返回一个php.ini文件。
- Mr Goobri
如果已安装扩展,则在Eclipse中运行时几乎肯定会使用不加载该扩展的不同PHP.ini。 phpinfo()的输出将告诉您加载了哪些扩展名以及正在使用哪个php.ini文件。 - SDC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接