调用未定义的函数 mysql_connect

Posted

技术标签:

【中文标题】调用未定义的函数 mysql_connect【英文标题】:Call to undefined function mysql_connect 【发布时间】:2012-01-22 23:55:38 【问题描述】:

我刚刚在我的家用电脑上安装了 php 和 Apache。当我尝试调用函数mysql_connect 时,我得到:

fatal error: call to undefined function mysql_connect.

我已经加载了 php.ini,其中我有未注释的行 extension=php_mysql.dllextension=php_mysqli.dll 并将扩展目录更改为 extension_dir = "C:\php\ext" - 这是文件 php_mysql.dll 和 php_mysqli.dll 所在的目录。我该如何解决这个问题?

phpinfo() 的输出: http://jsfiddle.net/MMTwA/

【问题讨论】:

你在编辑完 php.ini 后重启过 apache 吗? :) 你也安装了 MySQL 吗?也许你应该看看 XAMPP (apachefriends.org/en/xampp-windows.html),它是一个易于使用的包,包含 apache、php 和 mysql。 是的,我已重新启动它。是的,我已经安装了 MySQL,即使我没有安装,我仍然会得到“未定义的函数......”。如果我不解决这个问题,我可能会看看那个 XAMPP,谢谢。 尝试将libmysql.dll复制到C:\Windows\System32。同样,如果您只需要一个开发环境,请查看 XAMPP。它集成了所有东西,有一个 GUI,开箱即用,可以让您省去很多麻烦(尤其是在 Windows 下!)。 我已经在 C:\Windows\System32 中有 libmysql.dll,如果我晚上不解决这个问题,我会试试 XAMPP,谢谢。 提供 的内容可能会有所帮助。 【参考方案1】:

查看您的phpinfo() 输出后,似乎没有加载mysql 扩展。我怀疑您可能正在编辑错误的 php.ini 文件(可能有多个副本)。确保您正在编辑 C:\php\php.ini 的 php 文件(还要检查以确保 C:\Windows 中没有第二个副本)。

此外,您应该检查 Apache 日志是否有错误(应该位于 Apache 安装的 \logs\ 目录中。

如果您还没有阅读以下内容,我会看一下 cmets 部分,因为似乎很多人在设置它时遇到了怪癖。一些评论者提供了他们用来使其正常工作的解决方案。

http://php.net/manual/en/install.windows.extensions.php

另一种常见的解决方案似乎是将 libmysql.dll 和 php_mysql.dll 从 c:\PHP 复制到 C:\Windows\System32。

【讨论】:

我正在编辑正确的 php.ini - 例如,当我尝试将 display_errors = On 更改为 Off 时,我没有错误消息...我检查了 apache 日志并在那里找到像“PHP 警告:PHP 启动:无法加载动态库 'C:\\php\\ext\\php_mysql.dll' - 找不到指定的模块。\r\n in Unknown on line 0”这样的行。我会看看你发布的链接,谢谢 @NikolasJíša 我为我的答案添加了另一个可能的解决方案。试试看。 (复制文件到system32) 仍然无法正常工作 :)... 没关系,感谢您的时间和帮助,我明天试试 XAMPP。【参考方案2】:

关于我的(类似)问题的背景:

我被要求修复一个使用短标签的 PHP 项目。我的 WAMP 服务器的 PHP.ini 有 short_open_tag = off。 为了第一次运行项目,我把这个设置修改为short_open_tag = off

问题浮出水面: 在此更改之后,我的所有 mysql_connect() 调用都立即失败。它抛出了一个错误

致命错误:调用未定义函数 mysql_connect。

解决方案: 只需设置short_open_tag = off

【讨论】:

【参考方案3】:

我的电脑运行的是 Windows 7(Apache 2.2 & PHP 5.2.17 & MySQL 5.0.51a),文件“httpd.conf”中的语法 (C:\Program Files (x86)\Apache Software Foundation\Apache2. 2\conf\httpd.conf) 对斜杠很敏感。 您可以检查是否从正确的目录中读取了“php.ini”。只需在浏览器中输入“localhost/index.php”。 index.php的代码如下:

<?php echo phpinfo(); ?>

有一行(离顶部不远)称为“加载的配置文件”。因此,如果没有添加任何内容,那么问题可能是您的“php.ini”未被读取,即使您未注释(extension=php_mysql.dll 和 extension=php_mysqli.dll)。所以,为了让它工作,我做了以下步骤。我需要改变

PHPIniDir 'c:\PHP\'

PHPIniDir 'c:\PHP'

注意最后一个斜线扰乱了一切!

现在“加载的配置文件”行在刷新“localhost/index.php”(在我重新启动 Apache2.2 之前)后得到“C:\PHP\php.ini”,并且 mysql 块在那里。 MySQL 和 PHP 正在协同工作!

【讨论】:

【参考方案4】:

您可能忘记重新启动 apache/wamp/xamp/无论您使用什么网络服务器,您都需要这样做才能使其正常工作

【讨论】:

【参考方案5】:

检查你的 php.ini,我使用的是 Apache2.2 + php 5.3。我遇到了同样的问题,在修改 php.ini 以设置 PHP 的库目录后,它工作正常。问题在于默认的extension_dir 配置值。

我的工作环境的默认(和错误)值是

; extension_dir="ext"

没有任何完整路径并用分号注释。

有两个解决方案对我来说效果很好。

1.- 在 php.ini 文件中包含这一行

extension_dir="X:/[PathToYourPHPDirectory]/ext

其中 X: 是您的驱动器号安装(通常是 C: 或 D: )

2.- 您可以尝试简单地取消注释,删除分号。在 php.ini 文件中包含下一行

extension_dir="ext"

这两种方式对我来说都很好,但选择你的。在重试之前不要忘记重启 Apache。

希望对您有所帮助。

【讨论】:

我在 Windows 上花了一段时间才阅读扩展的评论。谢谢【参考方案6】:

您好,我收到此错误是因为我遗漏了与号 (&)

; php.ini
error_reporting = E_ALL & ~E_DEPRECATED

【讨论】:

【参考方案7】:

确保你在 /php 文件夹中编辑了 php.ini,我花了一整天的时间来检测错误,最后我发现我在错误的位置编辑了 php.ini。

【讨论】:

【参考方案8】:

更改我们的 php.ini 后,请务必重启 Apache Web 服务器。

【讨论】:

【参考方案9】:

仅供参考,无需将所有这些扩展文件复制到 Windows/System 或 Windows/System32。

只需将您在 PHP 目录中编辑的 php.ini 文件的副本复制到 Windows 根目录即可。

phpinfo 将清楚地解释以下内容: 配置文件 (php.ini) 路径 C:\Windows

逻辑意义将解释 php 想要加载位于 Windows 目录中的配置。 :-)

【讨论】:

【参考方案10】:

有一次我在使用Off 而不是off 时遇到问题。还要再检查一次垫子……路径必须准确。还将以下行添加到您的环境变量中。

C:\your-apache-path\bin; C:\your-php-path\bin;C:\your-mysql-path\bin

如果您使用的是 Windows,请右键单击 我的电脑,选择属性,然后导航到 高级 选项卡...(是 Windows 7)。首先点击高级系统设置,然后选择高级选项卡,然后选择环境变量。选择路径并单击编辑。在 .txt 文件中复制字符串以备备份(可能为空)--- 设置环境变量...注销并重新登录。

【讨论】:

【参考方案11】:

自从 mysql_connect 这个扩展在 PHP 5.5.0 中被弃用,并在 PHP 7.0.0 中被删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。 默认情况下 xampp 不会自动加载它

在你的 php.ini 文件中你应该取消注释

;; extension=php_mysql.dll

extension=php_mysql.dll

然后重启你的apache你应该没问题

【讨论】:

我试过这种方式,效果不错。不知道为什么有人要给低分!【参考方案12】:

同样的问题让我抓狂(Windows 10、Apache 2.4、MySql 5.7)。由于某种原因(可能与 PATH 相关),在 php.ini 中取消注释正确的 exension dll 和 extension_dir = "ext" 后,.dll 将无法加载。在尝试了很多事情之后,我只是将“ext”更改为使用完整的目录路径。例如。 extension_dir = "c:/phpinstall/ext" 并且成功了。

【讨论】:

【参考方案13】:

我认为你应该使用 mysqli_connect 而不是 mysql_connect

【讨论】:

你今天是对的,但是在提出问题时mysql_query 甚至还没有被弃用 请扩展您的答案。

以上是关于调用未定义的函数 mysql_connect的主要内容,如果未能解决你的问题,请参考以下文章

PHP调用未定义函数mysql_connect

雪豹:致命错误:调用未定义函数 mysql_connect()

致命错误:调用未定义函数 mysql_connect()

PHP / Apache:PHP致命错误:调用未定义函数mysql_connect()[重复]

XAMPP - 致命错误:调用未定义的函数mysql_connect()

XAMPP:mySQL 未连接 [重复]