php mysqli 连接到旧版本

标签 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 的表,之后我可以正确看到更新的记录(当使用 mysqlphpMyAdmin 时) 25 年 7 月 5 日。

但是当我将以下代码放入 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 实际上与 MySQL 的 localhost 不同。当您在 $host 参数中传递 IP 地址时,将强制通过 TCP/IP 进行连接。相反,传递 "localhost" 并且它应该使用默认的 UNIX 套接字而不是网络套接字。 (当使用默认套接字时,我实际上更喜欢传递NULL——它被转换为localhost——只是为了更清楚地表明我期望通过套接字进行连接.)


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

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

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

  3. 您还可以通过在 mysqli_connect() 的第 6 个参数 ($socket) 中手动传递正确的套接字来进行测试。同样,这需要与 $host 参数的 NULL/localhost 结合使用。

关于php mysqli 连接到旧版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545637/

相关文章:

javascript - 无法从 $_POST 变量访问使用 JSON.stringify 序列化的表单数据

PHP foreach 插入数组

php - 在 raspbian 8 (raspberry b+) 上使用 composer 安装 october cms

php - mysql_escape_string 漏洞

php - mysql php脚本只能在第一次使用

php - MySQL同时查找小写字母和大写字母的搜索问题

php - 从数组 : for loop not working 返回字母

mysql - 选择查询 metamug 的分页

php - 无法返回之前的 PHP 页面

php - MySQL 插入双引号 PHP