PDO不使用Port

时间:2014-01-10 14:22:15

标签: php mysql pdo

我正在尝试使用PDO连接到外部数据库。

$dbh = new PDO('mysql:host=hotsname;port=3309;dbname=dbname', 'root', 'root');

然而,这不适用于我所拥有的特定服务器。

我想也许只允许某个主机,但是我检查了mysql规则,并且在我个人的服务器上尝试了这个代码并且连接正常。

所以我知道代码可以工作,并且他们不会阻止我,并且防火墙正在接受对端口3309的请求并将其传递到端口3306上的正确服务器。

所以问题完全在一台服务器上。作为测试我认为我打开端口3306来测试代码而不指定端口。

$dbh = new PDO('mysql:host=hotsname;dbname=dbname', 'root', 'root');

这很直接。

所以我的问题是,为什么在添加端口时会导致它无法连接到数据库。只有这个特定的服务器才会出现这个问题。

很多,谢谢你的时间。

更新

给出的错误只是“无法连接到xxx.xxx.xxx.xxx上的mysql服务器”。

我现在稍微进一步了。代码现在正在工作,前提是我有一个防火墙规则允许使用3306在3306上传入服务器。所以即使我已经指定了一个端口,它似乎忽略了这一点并迫使它超出3306。

3 个答案:

答案 0 :(得分:11)

您可能使用localhost作为主机名。将其切换为127.0.0.1应该可以解决端口无知问题。

答案 1 :(得分:1)

该问题最终归于主持人。无论代码中指定的端口如何,所有流量都被强制输出3306。

答案 2 :(得分:0)

问题不在于主机服务器,而在于本地服务器,尤其是当您使用 WAMP 服务器时。

在本地环境中配置您的数据库连接文件,

class Database{
    
    // CHANGE THE DB INFO ACCORDING TO YOUR DATABASE
    private $db_host = 'localhost';
    private $db_name = 'database_api';
    private $db_username = 'root';
    private $port = "3308";
    private $db_password = '';
    
    public function dbConnection(){
        
        try{
            $conn = new PDO('mysql:host='.$this->db_host.'; port=3308; dbname='.$this->db_name,$this->db_username,$this->db_password);
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            return $conn;
        }
        catch(PDOException $e){
            echo "Connection error ".$e->getMessage(); 
            exit;
        }
          
    }
}

在实时或部署服务器上,像这样。 @移除端口

类数据库{

// CHANGE THE DB INFO ACCORDING TO YOUR DATABASE
private $db_host = 'localhost';
private $db_name = 'database_api';
private $db_username = 'root';
private $db_password = '';

public function dbConnection(){
    
    try{
        $conn = new PDO('mysql:host='.$this->db_host.'; dbname='.$this->db_name,$this->db_username,$this->db_password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $conn;
    }
    catch(PDOException $e){
        echo "Connection error ".$e->getMessage(); 
        exit;
    }
      
}

}