我正在尝试使用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。
答案 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;
}
}
}