【问题标题】:PHP not connecting to MYSQL via local socketPHP未通过本地套接字连接到MYSQL
【发布时间】:2018-11-18 20:46:26
【问题描述】:

我刚刚在我的 macbook pro 上安装了 mysql,mysql 似乎正在工作,但是我无法通过 mysqli 从 php 连接到 mysql。我不断收到错误。我已经阅读了许多不同的文章和网页,所有这些看起来都很复杂,并没有解决我的问题。

我已将 /tmp/mysock 添加到 php.ini 文件中:

pdo_mysql.default_socket= /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

我已经单独安装了 apache、php、mysql,没有使用 MAMP、XAMP、phpmyadmin 或 MYSQLworkbench 等软件

这是我尝试连接数据库的 PHP 代码,代码后面是浏览器上显示的错误。

<?php
$title = $_POST['blog_title'];
$body = $_POST['blog_entry'];
$link = mysqli_connect('localhost','root','password','blog');
if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}


mysqli_select_db($link,"blog") or die("Unable to select database");
$query = "INSERT INTO entires(title,body) VALUES ($title,$body);";
mysqli_query($query);
mysqli_close($link);
header('Location: ViewBlog.php');
exit();
?>

这是我得到的错误:

错误:无法连接到 MySQL。调试错误:2054 调试错误:服务器请求客户端未知的身份验证方法

我一直在努力解决这个问题,任何帮助将不胜感激,谢谢。 我正在尝试访问的数据库,我已经在 mysql ("blog") 中创建了;

【问题讨论】:

  • 听起来像是配置问题,而不是您的代码问题。你检查过Super UserServer Fault吗?
  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db-&gt;prepare("…") 过程化接口是 PHP 4 时代引入 mysqli API 时的产物,不应在新代码中使用。
  • 警告:当使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 不要使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug切勿$_POST$_GET任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • 您好 tadman,感谢您提供的有关 oo 界面的提示,这无法解决我遇到的配置问题。关于警告,这是一个初学者项目。

标签: php mysql sql mysqli localhost


【解决方案1】:

尝试在 MySQL 中检查用户身份验证类型。

我在 Win 10、PHP 7.3 和 MySQL 8.0.13 上设置 wp 时遇到了同样的错误。

这是我收到的完整错误消息:

警告:mysqli_connect():服务器请求的身份验证方法 客户端 [caching_sha2_password] 未知 C:\inetpub\wwwroot\dbtest.php 在第 2 行

警告:mysqli_connect(): (HY000/2054): 服务器请求 客户端未知的身份验证方法 第 2 行 C:\inetpub\wwwroot\dbtest.php 错误:无法连接到 mysql。调试错误:2054 调试错误:服务器请求 客户端未知的身份验证方法

为了解决这个问题,我必须将 MySQL 用户设置为使用标准身份验证类型。

这是我为解决此问题而运行的 SQL 脚本:

ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass';

【讨论】:

    猜你喜欢
    • 2011-01-12
    • 2019-07-03
    • 2017-01-21
    • 2013-03-04
    • 2020-11-14
    • 2011-02-25
    • 2017-10-07
    • 2013-02-17
    相关资源
    最近更新 更多