2017-03-09 70 views
0

试图与mysqli_connect工作,但新msqli不

$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 
+1

我知道你说的变量是对的,但重新检查。看起来你在第一个代码中有'$ username ='*''和'$ dbname ='*''。也许这是一个可变范围问题。 – Barmar

+0

只是将它们更改为*的这个问题。 –

+1

这两个代码必须有一些其他的区别。 'mysqli_connect()'只是一个调用'new mysqli'的函数。这就是'mysqli'的所有程序与OOP变体的工作原理。 – Barmar

回答

-1

在这里,可能是两个问题:

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

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

0

使用你的常识

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

显然,你的一些前提是错误的。程序版本很可能也不起作用。所以你必须测试它。而且,如果涉及到提出问题,提供一个可信的代码来做出明显的测试。虽然从你的表述方式来看,你并没有进行并排比较。

为什么不写你的变量定义,然后程序,然后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); 

这就是你不得不在这里作为一个明智的问题。 你会发现,逐字地告诉我们你做了什么并且发誓你所看到的东西在编程中不起作用。只有一个代码。

所以请运行这个确切的代码(设置您的凭据当然),并复制并粘贴它的输出。

+0

我已经测试过双方已经胸罩。你能告诉我什么前提是错误的吗? –

+0

**最有可能的是,程序性版本也不起作用。**该问题具体说明了它的确存在。谁不使用他们的常识? – Barmar

+0

@Barmar如果在这个网站上多年教会了我什么,它的座右铭是“永远不要相信OP *所说的*” –

-2

什么帮助我在改变瓦尔成单引号...

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

// Create connection 
$mysqli = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($mysqli->connect_error) { 
    die("Connection failed: " . $mysqli->connect_error); 
} 

else { 
    echo "Connected."; 
} 

$conn->close();