SQLSTATE[HY000] [2002] 操作超时

Posted

技术标签:

【中文标题】SQLSTATE[HY000] [2002] 操作超时【英文标题】:SQLSTATE[HY000] [2002] Operation timed out 【发布时间】:2017-09-10 10:51:19 【问题描述】:

我正在创建一个 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);

第二个:

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

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

致命错误:未捕获的 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 投入 /Applications/MAMP/htdocs/ijdb_pdo/config.php 在第 24 行

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

againtestConnection 失败:

我的代码搞砸了什么?

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

MacBook-Pro-3:/ sohail$ /Applications/MAMP/Library/bin/mysql -h "xx.xxx.xxx.xx" -u "xxxxxx" "-pxxxxxxx" "xxxxxxx";

并得到以下错误:

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

我认为我的远程机器上没有终端访问权限,所以我不能 SHOW GLOBAL VARIABLES LIKE 'PORT';命令 -谢谢

【问题讨论】:

MySQL 是否可能在您的服务器上使用不同的端口号? 我怎样才能知道是否存在端口号。我在服务器上运行 phpMyAdmin。我在 mysqlWorkbench 上本地工作,但无法创建远程连接,这可能是造成这种情况的原因吗? 如果你在服务器上有命令行访问权限,登录mysql命令行然后输入:show variables;端口号将在其中。 刚刚发现端口号是3306,但是写成3 306,有关系吗? 当然,空间会影响它。 【参考方案1】:

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

PDOException SQLSTATE[HY000] [2002] Connection timed out on my local computer

'PDOExcpetion' with message 'SQLSTATE[HY000] [2002] No route to host

要么您需要启用对远程数据库的访问权限,要么您遇到不时更改的网络 IP 问题。请验证这两件事。我希望这会对你有所帮助。

【讨论】:

下一次,不要发布答案,而是用这些链接之一投票结束 你是绝对正确的,但我没有权限发表评论,而我想帮助他.. 谢谢 我忘了启动我的 *** :)【参考方案2】:

就我而言, 不知何故,数据库连接凭据被更改了。

【讨论】:

以上是关于SQLSTATE[HY000] [2002] 操作超时的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2 SQLSTATE [HY000] [2002] 连接被拒绝错误

Laravel 8 - SQLSTATE[HY000] [2002] 没有这样的文件或目录

php增加用户时出现的【SQLSTATE[HY000] [2002]

SQLSTATE[HY000] [2002] 使用 whereHas 时 laravel 中的连接被拒绝错误

SQLSTATE[HY000] [2002] 连接被拒绝 |

SQLSTATE[HY000] [2002] 权限被拒绝 Laravel PDO 驱动程序(凭证通过工匠迁移工作)