php - 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
会有什么问题?谢谢你。
解决方案
问题是这127.0.0.1
实际上与localhost
MySQL 不同。当您在$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
在mysqli_connect()
. 同样,这需要结合使用NULL
/localhost
作为$host
参数。
推荐阅读
- angular - 如何从服务中获取数据?
- python - 如何从字符串中删除列表中的单词?
- javascript - 在 JavaScript 或 jquery 的后台页面加载时自动播放音乐
- android - 电影分析 Xamarin , Android, iOS
- python - 为什么 sleep 在我的代码之前运行?- Python
- mysql - 选择MySql表中值大于到零的所有行(十进制类型)
- llvm - llvm 错误 - 错误预期指令操作码
- ssl - 移动设备上的 Chromium(Chrome、Brave)停止信任我的本地 LetsEncrypt 证书
- mysql - 错误 1045 (28000): 拒绝用户 'root'@'localhost' 的访问
- android - 带有实时数据的 Kotlin Elvis 声明