可以用java连接到MySQL数据库,但不能用PHP?
我有一个java应用程序,可以连接到在线MySQL数据库,如下所示:可以用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
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());
}