正在尝试使用连接到数据库
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
echo '.';
}我得到了
Connection failed: Access denied for user '*'@'localhost' to database '*'但是如果我使用
$conn = mysqli_connect($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
echo '.';
}它起作用了!怎么回事?
我以前在中使用过新的mysqli,它工作得很好。我知道我的用户名/密码是正确的。它的GoDaddy和我点击了所有的权限。怎么一回事?
编辑:
运行以下命令:
<?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);输出:
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发布于 2017-03-09 13:10:43
这里,可能有两个问题:
登录到root用户(超级用户)并检查mysql表中的用户权限
发布于 2017-03-09 14:13:12
使用你的常识。
正如你可能知道的,这个世界上没有魔法。因此,如果你面对一些奇怪的,不可能的行为,这意味着这是一个人为的错误。
显然,你的一些前提是错误的。最有可能的是,过程化版本也不起作用。所以你必须对它进行测试。并且,如果涉及到提出问题,请提供可信任的代码,以进行明显的测试。而从你的措辞来看,你并没有做一个并排的比较。
为什么不先编写变量定义,然后编写过程化变量,再编写OOP变量,然后立即运行它呢?
这是你应该做的,而不是产生一些猜测或猜测。
健壮的错误报告,而不是生硬的die("Connection failed:,也会有所帮助。
<?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);这就是你必须在这里发布的一个合理的问题。你看,一字不差地告诉我们你做了什么,并发誓你看到了什么,这在编程中是行不通的。只有代码能做到这一点。
因此,请准确运行此代码(当然,设置您的凭据),并将其输出复制并粘贴到此处。
发布于 2018-10-19 04:44:42
我经历了完全相反的情况,即new mysqli()对我有效,而mysqli_connect()失败。我通过定义SQL服务器的端口并将"localhost“更改为"127.0.0.1”解决了这个问题。
因此,在上面的例子中,尝试:
$dbport = 3307;
$conn = new mysqli($servername, $username, $password, $dbname, $dbport);和/或
$servername = "127.0.0.1";也许这个问题与在Synology NAS上运行MySQL和PHP有关。
https://stackoverflow.com/questions/42686709
复制相似问题