php - 奇怪的主机问题

标签 php mysql phpmyadmin

我花了几个小时试图弄清楚这些东西,但没有成功。 我用谷歌搜索了这个,还在 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/

相关文章:

php - Amazon S3 - 您建议的上传小于允许的最小大小

php - Sonata管理包

php - MySQL 不会永远使用

PHP运行Union All SQL语句

php - 如何使用索引使mysql查询速度更快

PHP/CSS 随机背景

mysql - 如何使用下面的查询获取每一行的 BALANCE

PHP 注册表 - SQL

php - 如何使用 PHP/MySQL 显示具有相同样式的多个数据库对象?

php - "Error establishing a database connection"是什么意思