我在服务器上安装了两个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的更新记录(使用mysql
或phpMyAdmin
时)。
但是当我将以下代码放在php文件中时,我得到的版本号是5.6.20:
$link = mysqli_connect("127.0.0.1", USERNAME, PASSWORD, "testdb");
echo mysqli_get_server_version($link); # shows 50620
会有什么问题?谢谢。
答案 0 :(得分:2)
问题是127.0.0.1
实际上与MySQL的localhost
不同。当您在$host
参数中传递IP地址时,将强制通过TCP / IP进行连接。而是传递"localhost"
,它应使用默认的UNIX套接字而不是网络套接字。 (使用默认套接字时,我实际上更喜欢传递NULL
(它会转换为localhost
,只是为了更清楚地表明我希望通过套接字进行连接。)
如果仍然无法解决,您可以采取以下一些故障排除步骤:
放置一个phpinfo()
文件,并在MySQLi部分下查看,尤其注意MYSQLI_SOCKET
和mysqli.default_socket
的值(本地值和主值)。此值有可能在某个地方被覆盖。如果您在MYSQLI_SOCKET
中看到不同的值,则很可能受--with-mysqli-sock
编译时标志的影响。
您可以运行来回显mysqli_get_host_info($link)
的输出(只是看看它是通过TCP还是套接字进行连接)。
您还可以通过在$socket
的第6个参数(mysqli_connect()
)中手动传递正确的套接字来进行测试。同样,这需要与对NULL
参数使用localhost
/ $host
结合起来。