2014-07-13 124 views
0

我有一个Java应用程序,可以连接到一个在线的MySQL数据库,就像这样:可以用java连接到MySQL数据库,但不能用PHP连接?

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相同的(忽略主机名的区别,这应该是吧):

$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()); 
} 

过了一段时间,我得到这个:SQLSTATE [HY000] [2003]无法连接到MySQL服务器'85 .10.205.173'(4)

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

+0

为什么在第一个使用主机名而第二个使用IP? –

+0

Java包含一个端口号 - 您可能需要将其包含在您的PHP代码中。 – andrewsi

+0

我使用一个IP,因为如果我在PHP中使用主机名,它甚至不会识别主机(SQLSTATE [HY000] [2005]未知的MySQL服务器主机'db4free.net:3306'(3))。如果我包含端口,也是一样。 – RuntimeException

回答

0

禁用DNS主机名查找在mysql

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

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

不确定这会解决您的问题。

+0

对不起,但我怎样才能在联机PHPmyadmin界面上执行此操作? – RuntimeException

+0

@RuntimeException你可以编辑/etc/mysql/my.cnf文件 – fortune