[英]How do I connect to mysql from php?
我正在研究有關php / mysql開發的書中的示例。 我正在linux / apache環境中工作。
我已經建立了一個數據庫和一個用戶。 我嘗試連接以下代碼行:
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
我收到此錯誤:
警告:mysql_connect()[function.mysql-connect]:在第3行的/var/www/hosts/dj/connect.php中,對用戶'www-data'@'localhost'的訪問被拒絕(使用密碼:是)連接到數據庫:用戶'www-data'@'localhost'的訪問被拒絕(使用密碼:是)
我只能猜測這里發生了什么:我認為www-data是apache的用戶名。 在數據庫連接后,傳遞給mysql的憑據不是我的數據庫用戶的憑據,而是apache自己的憑據。 那是這里發生的事嗎?
如何傳遞為用戶定義的憑據?
編輯:順便說一句-我確實在$ db_hostname,$ db_username,$ db_password變量中具有憑據。
它們通過require_once被另一個文件傳遞。 如果找不到該文件,則出現錯誤。 因此,我知道我的腳本正在使用我的用戶名和密碼。
我的兩個腳本都可以在這里看到: http : //pastebin.com/MUneLEib
#解決了:
多謝你們。
你們中的一些人指出我編寫了粗心的代碼。
另外,我對Neo的回答特別滿意:他告訴我為什么要使用apache進程所有者的用戶名。
:)
我只是看了你的代碼! 用戶名變量為$ database_username,但是您使用的是$ db_username。將代碼更改為:
$db_server = mysql_connect($db_hostname, $database_username, $db_password);
或者您可以使用$ db_username ='[您的mysql用戶]'; //或您創建的用戶名更改用戶名行
當您不傳遞任何內容時,它將是mysql假定的用戶,但不會獲得密碼,因此,如果您未定義$ db_password,它將顯示:(使用password:NO)
您為用戶設置了$ database_username,但是您傳遞的$ db_username未被設置,因此當沒有使用mysql用戶的密碼傳遞任何內容時,該用戶是默認的linux用戶名! 由於沒有mysql用戶使用該密碼或特權,甚至沒有該名稱,您都沒有訪問權限!
該用戶是www-data,正如您猜到的,該用戶是分配給客戶端請求的apache用戶!
在login.php
,使用變量$database_username
,但在連接函數中,使用$db_username
。 嘗試匹配它們。
用戶名進入$db_username
,密碼進入$db_password
。
<?php
$dbhost = 'localhost';
$dbuser = 'username';
$dbpass = 'password';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
?>
所有這些其他答案都太冒昧了,好像您不知道$ db_username表示數據庫用戶名和密碼一樣。
該錯誤表明您已指定用戶名和密碼。 您剛剛指定了錯誤的。 您需要使用MySQL的用戶名和密碼,而不是系統的用戶名/密碼組合,所以不,這將不是www-data。 這可能是root用戶和一些密碼,但是同樣,這些憑據是在MySQL中指定的,並且(不一定)與系統用戶和密碼相同。
您的MySQL安裝應具有一個具有默認密碼的root用戶(您應立即更改)。 有幾個選項:您可以通過MySQL命令行添加用戶,或者如果提供程序具有類似的內容,則可以使用cPanel或Webmin之類的界面; 我都使用了這兩種方法,它們都有易於使用的界面來添加新的MySQL用戶並為其分配權限。
只是一個提示:我通常為每個數據庫創建一個用戶,並賦予該用戶對數據庫的全部特權,然后將該用戶與鏈接到數據庫的應用程序一起使用。
然后,當然,一旦創建了MySQL用戶帳戶並將其授予Web應用程序數據庫的特權,就可以在腳本中填寫該用戶名和密碼。
在嘗試連接之前,請確保為這些變量實際分配了數據庫登錄用戶名和密碼。 例如,在帶有mysql_connect()的行之前:
$db_username = 'myuser';
$db_password = 'mypass123';
我建議您先嘗試一下有關MySQL和PHP的教程,然后再嘗試做進一步的准備-以便您了解它們的工作原理。
試試這個: http : //www.tizag.com/mysqlTutorial/mysqlconnection.php
另外,文檔是您的朋友: http : //php.net/manual/zh/function.mysql-connect.php
給出的錯誤可能意味着尚未授予特權,或者密碼可能不正確。 檢查是否已創建用戶並授予訪問權限,或者只是發出此命令以確保將其設置為允許在mysql服務器上進行訪問。
$ mysql -u root -p
password:
(等等等等來自服務器)
GRANT ALL PRIVILEGES ON db_base.* TO 'db username'@'localhost' IDENTIFIED BY 'some password';
如果所有特權都太多,請考慮僅提供所需的基本權限:
GRANT SELECT,UPDATE,DELETE ON db_base.* TO 'db username'@'localhost' IDENTIFIED BY 'some password';
順便說一句,服務器對此語句成功的響應為“ 查詢正常”,受影響的行數為0 。
您的代碼是正確的,也就是說您的密碼不正確,因此您的mysql數據庫拒絕了mysql連接。 如果您使用的是xampp,請使用:
本地主機
作為主機名和
根
作為用戶名&在xampp中沒有密碼,所以它將是
$password = "";
然后$dblink = new mysqli($hostname, $dbuser, $password, $dbname);
所以你可以這樣設置你的var
<?php
$hostname = "localhost";
$dbuser = "root";
$password = ""; // means there is no password to the database
$dbname = "test"
?>
結論:
如果您將其作為消息-
警告:mysql_connect()[function.mysql-connect]:在第3行的/var/www/hosts/dj/connect.php中,對用戶'www-data'@'localhost'的訪問被拒絕(使用密碼:是)連接到數據庫:用戶'www-data'@'localhost'的訪問被拒絕(使用密碼:是)
這表示您輸入的密碼錯誤或沒有密碼。
mysql_connect()
! 你不應該使用這種或其他有關的相關功能這個擴展。
在PHP 7.0.0及更高版本中已將其折舊並刪除。 另一種選擇是使用PDO或MySQLi 。 以下是使用PDO連接到MySQL的示例腳本:
<?php
/* Connect to a MySQL database using driver invocation */
/* DSN options:
http://php.net/manual/en/ref.pdo-mysql.connection.php
Error handling options:
http://php.net/manual/en/pdo.error-handling.php
Learn how to secure against SQL injection attacks:
http://php.net/manual/en/pdo.prepared-statements.php
*/
$user = 'myusername';
$pass = 'mypassword';
$host = 'localhost';
$mydb = 'mydatabase';
$dsn = "mysql:dbname=$mydb;host=$host";
try {
$dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.