簡體   English   中英

如何從php連接到mysql?

[英]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命令行添加用戶,或者如果提供程序具有類似的內容,則可以使用cPanelWebmin之類的界面; 我都使用了這兩種方法,它們都有易於使用的界面來添加新的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及更高版本中已將其折舊並刪除。 另一種選擇是使用PDOMySQLi 以下是使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM