簡體   English   中英

無法使用 php 連接到 mysql

[英]can't connect to mysql with php

我似乎無法使用 php 腳本連接到 mysql,即使我可以與 phpmyadmin 正常連接。 我創建了一個帶有密碼的用戶,並為它提供了數據庫的適當權限,但每次連接時它都會死,說訪問被拒絕。 我在 windows xp 盒子上使用 xampp。 防火牆都被禁用了,我檢查了用戶名和密碼是否正確。 這是代碼:

$conn=mysql_connect('localhost','westbrookc16','megadots') || die (mysql_error());

用戶名是否必須采用特定格式或其他形式?

我有一種預感,這里的問題是您授予它的主機,盡管這實際上只是一個有根據的猜測。 如果您授予訪問 myuser@'127.0.0.1' 或服務器實際 ip 地址的權限,則不允許使用 localhost 作為主機進行連接。 這是因為當“localhost”被指定為主機時,php 將假定您想要使用 unix 套接字而不是網絡 sockets,並且在該上下文中 12..1 與 localhost.1 相同。

mysql_connect()的手冊條目中:

注意:每當您指定“localhost”或“localhost:port”作為服務器時,MySQL 客戶端庫將覆蓋它並嘗試連接到本地套接字(在 Windows 上名為 pipe)。 如果要使用 TCP/IP,請使用“127.0.0.1”而不是“localhost”。 如果 MySQL 客戶端庫嘗試連接到錯誤的本地套接字,則應在 PHP 配置中將正確的路徑設置為運行時配置,並將服務器字段留空。

希望這不是完全多余的。 :)

我以前見過這種情況,其中一個 mysql 用戶通過 php 登錄,而另一個則沒有。 有時用戶甚至使用命令行而不是 php。

這一直是埃米爾提到的兩個。 mysql 用戶實際上是用戶/主機對。 因此用戶 megadots@localhost 和用戶 megadots@mycoolhost 在 mysql.user 表中作為兩個單獨的記錄列出。

如果您可以從命令行登錄,請運行此查詢。

SELECT user, host FROM mysql.user

您應該會看到用戶及其主機的完整列表。

如果您識別出正在工作的 phpMyAdmin 用戶,請查看可能是您要使用的主機的主機列。

重置主機運行這些查詢(!小心使用整個 mysql 安裝的權限表)

update mysql.user set host = 'hostname' 
where user = 'username' and host = 'oldhostname';

flush privileges;

如果您看到一條以用戶名和 % 作為主機的記錄將優先於其他所有內容,如果該用戶有多個記錄,並且其中一個以 % 作為主機,則以 % 作為主機的用戶名可能有密碼錯誤,無論您重置 username@localhost 的密碼多少次,它都是無效的,因為它會在登錄時與 username@% 進行比較。

就我而言,我已經刪除了用於創建我正在使用的數據庫的用戶。 通常這應該給出錯誤“用戶指定的定義器不存在”,但由於某種原因,它只是返回了對我的 PHP 代碼的更一般的訪問被拒絕。 我不確定為什么我仍然可以通過命令行和其他界面登錄。 為了糾正我的問題,我重新創建了被刪除的用戶。

If you are using Linux use the synaptic package manager to find and download all the libraries and mods that PHP and MySQL need so they can both connect. 我的問題是單獨運行的 PHP 腳本在服務器端工作,但是當我嘗試使用 PHP 腳本連接到 MySQL 時它無法連接,我只會看到一個純白色的頁面。 然后我注意到我沒有 PHP 用來連接到 MySQL 的 MySQL 客戶端庫。 我只有 MySQL 服務器庫。 安裝客戶端庫並重新啟動 apache 服務器后,我的 PHP 腳本連接沒有問題。 默認情況下,PHP 5 不隨 MySQL 客戶端庫一起安裝。

在遇到類似問題后,我發現將 '127.0.0.1' 替換為 'localhost' 可以解決問題(盡管我能夠使用 'localhost' 通過終端成功連接)。

我遇到了同樣的問題,但后來我發現如果您使用“%”(任何主機)保留默認帳戶,沒有密碼,那么您就無法使用密碼連接。 我不確定問題到底是什么,但刪除它們解決了它。

  1. 確保您已使用 MySQL 擴展配置了 PHP。 在 MacPorts 上,您需要單獨安裝它:
me@lastdance Sites % sudo port search php | grep mysql
php-mysql-xdevapi @8.0.17 (php, devel)
php52-mysql @5.2.17 (php, databases)
a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
php53-mysql @5.3.29 (php, databases)
a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
php54-mysql @5.4.45 (php, databases)
a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
php55-mysql @5.5.38 (php, databases)
a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
php56-mysql @5.6.40 (php, databases)
a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
php70-mysql @7.0.33 (php, databases)
a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
php71-mysql @7.1.32 (php, databases)
a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
php71-mysql-xdevapi @8.0.17 (php, devel)
php72-mysql @7.2.23 (php, databases)
a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
php72-mysql-xdevapi @8.0.17 (php, devel)
php73-mysql @7.3.10 (php, databases)
a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
php73-mysql-xdevapi @8.0.17 (php, devel)
me@lastdance Sites % sudo port install php73-mysql
--->  Computing dependencies for php73-mysql
--->  Cleaning php73-mysql
--->  Scanning binaries for linking errors
--->  No broken files found.
--->  No broken ports found.
me@lastdance Sites %
  1. 確保在 php.ini 文件中正確指定了 localhost mysql 套接字。 看到我的數據庫用戶存在,但我仍然得到一個(HY000/2002):沒有這樣的文件或目錄

在我的系統上,我必須編輯文件/opt/local/etc/php73/php.ini並添加:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
; http://php.net/mysqli.default-socket
mysqli.default_socket = /opt/local/var/run/mysql8/mysqld.sock

並賦予它適當的數據庫權限

如何? 授予用戶時,您為用戶使用了什么主機?

這是通常的做法:

GRANT ALL ON mydb.* TO 'someuser'@'somehost' identified by 'password';
FLUSH privileges;

在您的情況下,“somehost”可能應該是“localhost”或“127.0.0.1”(參見其他帖子)

語法參考: http://dev.mysql.com/doc/refman/5.1/en/grant.html

這可能是一個錯字,或者您沒有授予權限。 有時很難發現這些。

我建議不要使用 phpmyadmin,而是下載SQLYOG的副本(免費的社區版很棒)並嘗試通過它與您的用戶登錄。 診斷出問題后,將用戶名/密碼復制/粘貼回您的腳本。

順便說一句 phpmyadmin 很好,但是像 sqlyog 這樣的程序通常更方便,所以無論如何都值得一試——我相信你會被轉換的。 如果 sqlyog 不太符合您的口味,還有其他幾種免費和商業替代品。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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