【问题标题】:MacPorts Apache : PDO works but mysql_connect and mysqi_connect does notMacPorts Apache:PDO 有效,但 mysql_connect 和 mysqi_connect 无效
【发布时间】:2014-05-03 20:19:38
【问题描述】:

我尝试在我的 Mac 上配置 Wordpress。我使用带有 MySQL 的 Apache 服务器,通过 MacPorts 安装。

所以,从 phpMyAdmin,我创建了一个带有“hellowp”数据库​​的“hellowp”用户。我可以使用该用户正确登录,并且可以访问 hellop 数据库。

但是当我在 wp-config.php 或 Wordpress 配置 GUI 中设置这些参数时,Wordpress 无法登录数据库。

我启用了调试,这是我得到的错误:

Warning: mysqli_real_connect(): (HY000/2002): No such file or directory in /private/var/www/hellowp/wp-includes/wp-db.php on line 1342

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /private/var/www/hellowp/wp-includes/wp-db.php on line 1372

Warning: mysql_connect(): No such file or directory in /private/var/www/hellowp/wp-includes/wp-db.php on line 1372

我的 PHP 版本是 5.5.10。我将此服务器用于许多项目,其中一些在 Drupal 上运行,我对它们没有任何问题。

我也尝试在 Wordpress 中以 MySQL root 用户身份登录,但错误仍然相同。

编辑 1: 我尝试从 MySQL Workbench 和 SURPRISE 登录我的服务器,在 127.0.0.1 找不到服务器...奇怪的是 phpMyAdmin 仍在工作,其他项目和Drupal 使用数据库没有任何问题。我将对此进行调查,也许是防火墙问题。有消息时会更新。

编辑 2: 好的,所以我检查了你们中的许多人所说的话,是的,你们中的许多人是对的:来自 PHP 的 MySQL 连接仅在使用 PDO 时才有效(我在所有我的项目和 Drupal 做的)。 mysql_connect 和 mysqli_connect 正在触发错误。 但事实是我不会重写 Wordpress,我使用的是最新版本。所以我会尝试找到一个解决方案,让 mysql_connect 和 mysqli_connect 在我的 PHP 配置上工作。

**编辑 3:解决方案:** 几个月前我安装了 Percona 服务器(一个 MySQL 分支)来替换 mysql 服务器。在此安装过程中,在我的 php.ini 中,我仅为 PDO 设置了套接字,而不为 mysqli 和 mysql 设置了套接字。所以,我必须在我的 php.ini 中为所有 mysql 扩展设置套接字。这是那些行:

pdo_mysql.default_socket="/opt/local/var/run/percona/mysqld.sock"
mysql.default_socket = "/opt/local/var/run/percona/mysqld.sock"
mysqli.default_socket = "/opt/local/var/run/percona/mysqld.sock"

【问题讨论】:

  • 解决方法在报错信息中;它已被弃用/删除。使用mysqli_connect()加,不能混用这两个API
  • 它会在这些错误消息中为您提供原因。
  • @Fred-ii-,这是错误的。 mysql_connect 在 5.5 中已弃用,但未删除。 @maxime,请检查/private/var/www/hellowp/wp-includes/wp-db.php 路径。错误是No such file or directory
  • 你很可能是对的。然而,我已经看到了一些服务器上运行 OP 的情况,mysql_* 函数确实被删除了。 @NaeelMaqsudov 所以,我在这个上 50% 正确;-)
  • 这里是 wp-db.php 的第 1371 到 1375 行。我没有看到任何包含或文件:if ( WP_DEBUG ) { $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags ); } else { $this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags ); }

标签: php mysql wordpress macos apache


【解决方案1】:

第一条错误消息告诉您 Wordpress 找不到您的数据库,很可能您的主机名不正确 - 它通常是“localhost”,但您可以尝试 127.0.0.1,我认为它更适合 Mac。

其余的错误消息具有误导性 - 如果 wordpress 无法建立 Mysqli 连接,它将尝试已弃用的 mysql,在您的情况下,也会因为找不到数据库而失败。

【讨论】:

  • 我遇到了同样的错误。在某些情况下,例如我的 PDO 套接字未配置,因此它寻找默认套接字位置而不是实际位置 - 在这种情况下,基于 MacPorts 的安装在/opt/local/var/run/mysql55/mysqld.sock。我将套接字路径添加到我的 php.ini 中,然后一切都恢复正常了。
【解决方案2】:

不确定,但这是 Id 通常调试它的方式。

  1. 通过命令行登录数据库。这可以确保它在您的路径中并且一切正常。
  2. 如果可行,这是我本地开发环境中的一部分。

    // ** MySQL 设置 - 您可以从您的虚拟主机获取此信息 ** // /** WordPress 的数据库名称 */ 定义('DB_NAME', 'foo');

    /** MySQL 数据库用户名 */ 定义('DB_USER', 'foo');

    /** MySQL 数据库密码 */ 定义('DB_PASSWORD', 'foooo');

    /** MySQL 主机名 */ 定义('DB_HOST', '127.0.0.1')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2017-01-08
    • 2012-05-08
    • 2017-03-15
    • 2014-10-30
    • 2011-03-08
    • 2013-11-27
    相关资源
    最近更新 更多