【问题标题】:Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'; phpinfo shows no PDO extensions, but php -i (php -m) do未定义的类常量'MYSQL_ATTR_INIT_COMMAND'; phpinfo 没有显示 PDO 扩展,但 php -i (php -m) 显示
【发布时间】:2015-06-24 18:48:35
【问题描述】:

我正在学习 Zend 框架,浏览专辑示例。

当我打开浏览器访问相册模块时,我得到这个错误:

致命错误:未定义的类常量“MYSQL_ATTR_INIT_COMMAND”

经过大量谷歌搜索和堆栈溢出后,PDO 似乎没有激活。

真正困扰我的是,当我从命令行使用 'php -i' 时,我确实看到启用了 PDO。但是 phpinfo() 没有显示 PDO。

我已经尝试了几件事。他们没有工作:

  1. 设置“extension_dir”的绝对路径。

  2. 将 php 文件夹的路径添加到 'path' 环境变量中。

  3. 去掉php + apache,重新安装。

  4. 当然,取消注释 extension=php_pdo_mysql.dll。

请帮忙!

【问题讨论】:

  • php -i 是命令行 php。您可能在 web 上下文中运行 phpinfo(),它可以有完全不同的 .ini 文件选项。检查信息输出 - 其中一个部分会告诉您在启动时解析了哪些 .ini 文件。
  • @MarcB,我认为你是对的。唯一的问题是在 phpinfo() 输出中显示 c:\windows,但那里没有 php.ini。这怎么可能? (不解)
  • php.ini 只是覆盖 php 的编译默认值。不需要 .ini - php 只会使用其内部默认值。
  • @MarcB,你是对的。我将 PHPINIDir 指令添加到 apache 的虚拟主机文件中并且它工作。如果您愿意,请提出答案。我会接受的。

标签: php mysql apache zend-framework


【解决方案1】:

感谢 Mark B。他在 cmets 中提出了正确答案。

浏览器中带有phpinfo()的.php文件显示php从C:\Windows加载了php.ini,但是我的C:\Windows下没有php.ini。之所以会这样,是因为 php.ini 覆盖了 php 的编译默认值。所以我看到了 phpinfo() 的编译默认值。

我在我的虚拟主机中使用 PHPIniDir 来指向包含 php.ini 文件的实际文件夹。然后我看到了 PDO 扩展,一切正常。

PS:马克,如果你发布你的答案,我会删除我的并接受你的。

【讨论】:

    猜你喜欢
    • 2023-01-25
    • 2015-04-21
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多