我花了几个小时试图弄清楚这些东西,但没有成功。 我用谷歌搜索了这个,还在 stackoverflow 上按关键字搜索。
所以,我在这里问问题。 作为面板,有 DirectAdmin。
当我进入 DirectAdmin 并创建 MySQL 时 数据库它告诉“数据库已成功创建”。
并且还告诉:“将此数据用于您的脚本”
Host : localhost (yes, localhost! )
user : db_user
password : db_password
databse : db_name
好的。当我将此数据输入 phpMyAdmin 时它会起作用 两者 - 用户和密码。我可以使用 SQL 通过 phpMyAdmin 操作数据。 没关系。
但是
当我将此数据输入到某个脚本时
<?php
$host = 'localhost';
$password = 'db_password';
$db = 'db_name';
$user = 'db_user';
// I'm aware of PDO and I use this one but PDO isn't installed on my hosting provider
// This is just test to see if connection can be established
if ( ! mysql_connect($host, $user, $password) ){
die( mysql_error() );
}
所以它告诉我们,“拒绝访问 db_user@localhost 使用密码(是)”! 有什么问题?!我输入了正确的数据!
然后我尝试使用我网站的地址而不是“localhost”。
然后 mysql_error()
告诉这样的事情:“此主机不允许来自 mysite.com 的连接”。
再次 - 从 phpMyAdmin 我可以看到:用户 - db_user@localhost
(这样用户名和主机都没有错)
问题是:为什么它允许从 phpMyAdmin 连接而不允许从自定义脚本连接?
更新 1。
我也尝试将 port
(如@Bondye 建议的那样)和 localhost
更改为 127.0.0.1
。但是得到同样的错误 - Access denied for user 'db_user'@'localhost' (using password: YES)
这是来自 PHP.INI 的 MySQL 部分
Active Persistent Links 0
Active Links 0
Client API version 5.1.53
MYSQL_MODULE_TYPE external
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_INCLUDE -I/usr/local/include/mysql
MYSQL_LIBS -L/usr/local/lib/mysql -lmysqlclient
Param: Local Value: Master Value:
mysql.allow_persistent Off Off
mysql.connect_timeout 60 60
mysql.default_host no value no value
mysql.default_password no value no value
mysql.default_port no value no value
mysql.default_socket no value no value
mysql.default_user no value no value
mysql.max_links 5 5
mysql.max_persistent 0 0
mysql.trace_mode Off Off
System : FreeBSD
我知道 PDO 和 MySQLi,但我不会使用它们。对于我正在处理的当前脚本,我必须使用旧的 mysql_*
函数。
提前致谢
最佳答案
http://php.net/manual/en/function.mysql-connect.php
Note:
Whenever you specify "localhost" or "localhost:port" as server, the MySQL client library will override this and try to connect to a local socket (named pipe on Windows). If you want to use TCP/IP, use "127.0.0.1" instead of "localhost". If the MySQL client library tries to connect to the wrong local socket, you should set the correct path as in your PHP configuration and leave the server field blank.
您可能会考虑改用 mysqli(以 i 结尾表示改进)
Use of this extension is discouraged. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
mysqli_connect()
PDO::__construct()
关于php - 奇怪的主机问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13802446/