SQLSTATE[HY000] [2002] 操作超时

use*_*684 6 php mysql pdo

我正在创建 pdo 数据连接。连接在本地主机上工作正常。但是,当我连接到远程数据库并使用与之前使用过的完全相同的凭据时,我得到一个空页面,没有错误消息,只是一个空页面。

上一个项目中使用的相同凭据是使用 mysqli 完成的,而这个是使用 pdo 完成的。

我尝试了两种类型的 pdo 连接代码,但都不起作用。

第一:

$databaseHost = 'x.xxx.xxx.xx';
$databaseName = 'xxxxxxxxx';
$databaseUsername = 'xxxxxxx';
$databasePassword = 'xxxxxx';
$charset = 'utf8';

try {

    $dsn = "mysql:host=$databaseHost;dbname=$databaseName;charset=$charset";


} catch(PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$opt = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
        ];

$pdo = new PDO($dsn, $databaseUsername, $databasePassword, $opt);
Run Code Online (Sandbox Code Playgroud)

第二个:

$databaseHost = 'x.xxx.xxx.xx';
$databaseName = 'xxxxxxxxx';
$databaseUsername = 'xxxxxxx';
$databasePassword = 'xxxxxx';

$opt = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
        ];

try {

    $pdo = new PDO("mysql:host={$databaseHost};dbname={$databaseName}", $databaseUsername, $databasePassword, $opt);

    } catch(PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
  }
Run Code Online (Sandbox Code Playgroud)

即使两个连接都在本地主机中工作,我尝试在浏览器中本地加载此连接页面,第一个选项给了我这个错误:

致命错误:未捕获的 PDOException:SQLSTATE[HY000] [2002] 操作在 /Applications/MAMP/htdocs/ijdb_pdo/config.php:24 中超时 堆栈跟踪:#0 /Applications/MAMP/htdocs/ijdb_pdo/config.php(24 ): PDO->__construct('mysql:host=83.1...', 'u1164707_sohail', 'sohail123', Array) #1 {main} 在第 24 行的 /Applications/MAMP/htdocs/ijdb_pdo/config.php 中抛出

第二个选项给了我以下错误:

再次测试连接失败:SQLSTATE[HY000] [2002] 操作超时

我的代码搞砸了什么?

然后我尝试通过终端连接:

MacBook-Pro-3:/ sohail$ /Applications/MAMP/Library/bin/mysql -h "xx.xxx.xxx.xx" -u "xxxxxx" "-pxxxxxxx" "xxxxxxx";
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

警告:在命令行界面上使用密码可能不安全。错误 2003 (HY000): 无法连接到 'xx.xxx.xxx.xx' (60) MacBook-Pro-3:/ sohail$ 上的 MySQL 服务器

我认为我在远程计算机上没有终端访问权限,因此我无法执行 SHOW GLOBAL VARIABLES LIKE 'PORT'; cmd-谢谢

小智 2

对于你的第二个错误,参考这两个答案。

PDOException SQLSTATE[HY000] [2002] 我的本地计算机上的连接超时

'PDOExcpetion' 带有消息 'SQLSTATE[HY000] [2002] 没有到主机的路由

要么您需要启用对远程数据库的访问,要么您遇到网络 IP 问题,该问题会不时发生变化。请确认这两件事。我希望这能帮到您。