可以用java连接到MySQL数据库,但不能用PHP?

可以用java连接到MySQL数据库,但不能用PHP?,java,php,mysql,Java,Php,Mysql,我有一个java应用程序,可以连接到在线MySQL数据库,如下所示: private String hostName = "db4free.net:3306"; private String dbName = "mydbname"; private String username = "name"; private String password = "pw"; try { Class.forName("com.mysql.jdbc.Driver"); connection

我有一个java应用程序,可以连接到在线MySQL数据库,如下所示:

private String hostName = "db4free.net:3306";
private String dbName = "mydbname";
private String username = "name";
private String password = "pw";
   try {
    Class.forName("com.mysql.jdbc.Driver");
    connection = DriverManager.getConnection("jdbc:mysql://" + hostName + "/" + dbName, username, password);
    System.out.println("Connection established!");
   } catch (Exception ex) {
        ex.printStackTrace();
   }
它工作得很好。但是,我对PHP也做了同样的尝试(忽略主机名差异,应该就是这样):

过了一会儿,我发现:SQLSTATE[HY000][2003]无法连接到'85.10.205.173'上的MySQL服务器(4)


那么,为什么两者的工作方式不同呢?我认为远程访问已启用(因为我可以连接java)。

禁用mysql中的DNS主机名查找

要禁用DNS主机名查找,请使用--skip name resolve选项启动服务器。在这种情况下,服务器只使用IP地址而不使用主机名来匹配连接主机与MySQL授权表中的行。只能使用那些表中使用IP地址指定的帐户

不要忘记重新启动MySQL才能生效


不确定这是否能解决您的问题。

为什么要在第一个中使用主机名,在第二个中使用IP?Java版本包含一个端口号-您可能需要在PHP代码中包含该端口号。我使用IP,因为如果我在PHP中使用主机名,它甚至无法识别主机(SQLSTATE[HY000][2005]未知MySQL服务器主机'db4free.net:3306'(3))。如果我包括端口,也一样。你启用了pdo_mysql扩展吗?@fortune当然。这段代码与另一个数据库一起工作,该数据库是脚本的本地数据库。抱歉,但如何在联机PHPmyadmin界面上执行此操作?
$host = "85.10.205.173"; 
$dbname = "dbname"; 
$username = "name"; 
$password = "pw"; 

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 

try 
{ 
    // Open connection with db
    $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 
} 
catch(PDOException $ex) 
{ 
    // Just an error message, if connection fails
    die("Failed to connect to the database: " . $ex->getMessage()); 
}