首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >拒绝用户'testuser'@'localhost‘对数据库'testdb’的访问

拒绝用户'testuser'@'localhost‘对数据库'testdb’的访问
EN

Stack Overflow用户
提问于 2017-03-09 12:25:32
回答 4查看 1.4K关注 0票数 0

正在尝试使用连接到数据库

代码语言:javascript
运行
复制
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
} else {
  echo '.';
}

我得到了

代码语言:javascript
运行
复制
Connection failed: Access denied for user '*'@'localhost' to database '*'

但是如果我使用

代码语言:javascript
运行
复制
$conn = mysqli_connect($servername, $username, $password, $dbname);
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
} else {
  echo '.';
}

它起作用了!怎么回事?

我以前在中使用过新的mysqli,它工作得很好。我知道我的用户名/密码是正确的。它的GoDaddy和我点击了所有的权限。怎么一回事?

编辑:

运行以下命令:

代码语言:javascript
运行
复制
<?php 
ini_set('display_errors',1);
error_reporting(E_ALL);

$servername = "localhost";
$username = "testuser";
$password = "testpassword";
$dbname = "testdb";

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn1 = mysqli_connect($servername, $username, $password, $dbname);
$conn2 = new mysqli($servername, $username, $password, $dbname);
var_dump($conn1->stat, $conn2->stat);

输出:

代码语言:javascript
运行
复制
Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'Access denied for user 'testuser'@'localhost' to database 'testdb'' in /home/public_html/wj-test.php:11 
Stack trace: 
    #0 /home/public_html/wj-test.php(11): mysqli_connect('localhost', 'testuser', 'testpassword', 'testdb') 
    #1 {main} thrown in /home/public_html/wj-test.php on line 11
EN

回答 4

Stack Overflow用户

发布于 2017-03-09 13:10:43

这里,可能有两个问题:

  • 数据库密码可能错误或密码为空。
  • 用户权限,此特定用户可能没有此数据库的权限。

登录到root用户(超级用户)并检查mysql表中的用户权限

票数 -2
EN

Stack Overflow用户

发布于 2017-03-09 14:13:12

使用你的常识。

正如你可能知道的,这个世界上没有魔法。因此,如果你面对一些奇怪的,不可能的行为,这意味着这是一个人为的错误。

显然,你的一些前提是错误的。最有可能的是,过程化版本也不起作用。所以你必须对它进行测试。并且,如果涉及到提出问题,请提供可信任的代码,以进行明显的测试。而从你的措辞来看,你并没有做一个并排的比较。

为什么不先编写变量定义,然后编写过程化变量,再编写OOP变量,然后立即运行它呢?

这是你应该做的,而不是产生一些猜测或猜测。

健壮的错误报告,而不是生硬的die("Connection failed:,也会有所帮助。

代码语言:javascript
运行
复制
<?php 
ini_set('display_errors',1);
error_reporting(E_ALL);

$servername = "";
$username = "";
$password = "";
$dbname = "";

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn1 = mysqli_connect($servername, $username, $password, $dbname);
$conn2 = new mysqli($servername, $username, $password, $dbname);
var_dump($conn1->stat, $conn2->stat);

这就是你必须在这里发布的一个合理的问题。你看,一字不差地告诉我们你做了什么,并发誓你看到了什么,这在编程中是行不通的。只有代码能做到这一点。

因此,请准确运行此代码(当然,设置您的凭据),并将其输出复制并粘贴到此处。

票数 -2
EN

Stack Overflow用户

发布于 2018-10-19 04:44:42

我经历了完全相反的情况,即new mysqli()对我有效,而mysqli_connect()失败。我通过定义SQL服务器的端口并将"localhost“更改为"127.0.0.1”解决了这个问题。

因此,在上面的例子中,尝试:

代码语言:javascript
运行
复制
$dbport = 3307;
$conn = new mysqli($servername, $username, $password, $dbname, $dbport);

和/或

代码语言:javascript
运行
复制
$servername = "127.0.0.1";

也许这个问题与在Synology NAS上运行MySQL和PHP有关。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42686709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档