如何确定 PHP 中是否启用了 PDO?

39
有没有 PHP 命令可用于确定 PDO 是否启用或禁用?
我知道我可以手动运行 phpinfo() 并仔细查看,但我有一个脚本在各种 Web 服务器上运行,可以显示所选服务器的 PHP 配置设置。
因此,我想知道是否有一条命令可供使用。
7个回答

63

通过使用 extension_loaded 函数来确定正确的方法:

if ( extension_loaded('pdo') ) {
    .......
}

你也可以使用以下代码来检查是否存在特定于数据库的PDO驱动程序:

if ( extension_loaded('pdo_<database type here>') ) { // e.g., pdo_mysql
    .......
}

7
pdo_firebirdpdo_mysqlpdo_ocipdo_odbcpdo_pgsqlpdo_sqlitepdo_sqlite_external一样。 - Satbir Kira

41

检查类是否存在:

if (class_exists('PDO'))

我很感激大家的支持和赞同,但是请查看Salman Abbas的答案,那才是正确的做法。


本来想建议使用 defined(),但是 PDO 已经转用类常量了。 - AJ.
我测试过了,这种方式完美运行(无论是在启用它的服务器上还是在未启用它的服务器上)。感谢@AJ! - H. Ferrence
3
如果OP只是想检查存在性而不想同时自动加载类,那么将false作为第二个参数添加会更好,你觉得呢? - Jürgen Thelen
9
除非有些疯狂的库开发者决定将他的 poly-device operator 类命名为 PDO - webbiedave

14

只需在命令提示符下运行命令 php -m,它会显示已安装的PHP模块列表。


7

你有两个选择:

if (extension_loaded('pdo')) { /* ... */ }

或者(这个不是100%可靠的,因为它可以在用户类中实现):
if (class_exists('PDO', false)) { /* ... */ }

个人而言,我更喜欢第一种选择。


3
if (!defined('PDO::ATTR_DRIVER_NAME')) {
echo 'PDO unavailable';
}
elseif (defined('PDO::ATTR_DRIVER_NAME')) {
echo 'PDO available';
}

我希望这个能够成功


1

怎么样?

if (in_array('pdo', get_loaded_extensions())) {
   ... pdo is there ...
}

@Dr. DOT:它只是看起来。此外,AJ并没有写那个答案。GolezTrol写的。 - webbiedave
我知道...不确定我是如何或为什么用上了“AJ” - 对不起@GolezTrol。 - H. Ferrence

0

要在Linux终端级别上检查,请使用以下命令:

php -m

这将输出与从您的php.ini安装的模块相关的内容enter image description here


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