php mysqli连接到旧版本

时间:2019-04-06 03:30:17

标签: php mysql mysqli

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

我的php.ini

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

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

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

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

会有什么问题?谢谢。

1 个答案:

答案 0 :(得分:2)

问题是127.0.0.1实际上与MySQL的localhost不同。当您在$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. 您还可以通过在$socket的第6个参数(mysqli_connect())中手动传递正确的套接字来进行测试。同样,这需要与对NULL参数使用localhost / $host结合起来。