2017-03-09 32 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();