首页 > 解决方案 > php mysqli 连接到旧版本

问题描述

我的服务器上安装了两个版本的 MySQL,5.6.20 和 5.7.25。

我的php.ini

; php.ini
mysqli.default_socket=/opt/local/var/run/mysql57/mysqld.sock

我可以使用 编辑 5.7.25 的表phpMyAdmin,之后我可以正确地看到更新的记录(使用mysql或时phpMyAdmin)5.7.25。

但是当我将以下代码放入 php 文件时,我得到的版本号为 5.6.20:

$link = mysqli_connect("127.0.0.1", USERNAME, PASSWORD, "testdb");
echo mysqli_get_server_version($link);       # shows 50620

会有什么问题?谢谢你。

标签: phpmysqlmysqli

解决方案


问题是这127.0.0.1实际上与localhostMySQL 不同。当您在$host参数中传递 IP 地址时,将强制通过 TCP/IP 进行连接。相反,通过"localhost",它应该使用默认的 UNIX 套接字而不是网络套接字。(当使用默认套接字时,我实际上更喜欢传递NULL- 它被转换为 -localhost只是为了更清楚地表明我期望连接通过套接字发生。)


如果这仍然不起作用,您可以采取以下一些故障排除步骤:

  1. 放置一个phpinfo()文件并查看 MySQLi 部分,特别注意 和 的值MYSQLI_SOCKETmysqli.default_socket本地值和主值)。这个值有可能在某处被覆盖。如果您在 中看到不同的值MYSQLI_SOCKET,则它可能受到--with-mysqli-sock编译时标志的影响。

  2. 您可以运行正在回显mysqli_get_host_info($link)(只是为了查看它是通过 TCP 还是通过套接字连接)的输出。

  3. 您也可以通过$socketmysqli_connect(). 同样,这需要结合使用NULL/localhost作为$host参数。


推荐阅读