【问题标题】:PDOException: SQLSTATE[HY000] [2002] Connection refusedPDOException: SQLSTATE[HY000] [2002] 连接被拒绝
【发布时间】:2020-01-22 13:04:28
【问题描述】:

我刚刚遇到了这个

PDOException: SQLSTATE[HY000] [2002] Connection refused in /var/www/html/inc/config/db.php on line 11

一开始我以为是mysql服务器的问题,但经过几个小时的尝试和错误,我发现错误来自PDO,如果使用mysqli_connect根本没有错误

$conn = new PDO("mysql:host=127.0.0.1;dbname=docker", "root", "tiger"); 


$conn = mysqli_connect("mysql", "root", "tiger", null);

我也尝试过不同的数据库,甚至是新创建的数据库

有谁知道为什么一个工作另一个不工作? ?

编辑: 我正在使用 docker-compose 来设置环境。 这里是 docker-compose.yaml

version: "3"

services:
  webserver:
    build: 
      context: ./bin/webserver
    container_name: '7.1.x-webserver'
    restart: 'always'
    ports:
      - "80:80"
      - "443:443"
    links: 
      - mysql
    volumes: 
      - ${DOCUMENT_ROOT-./www}:/var/www/html
      - ./config/php/php.ini:/usr/local/etc/php/php.ini
      - ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled
      - ${LOG_DIR-./logs/apache2}:/var/log/apache2
  mysql:
    build: ./bin/mysql
    container_name: '5.7-mysql'
    restart: 'always'
    ports:
      - "3306:3306"
    volumes: 
      - ${MYSQL_DATA_DIR-./data/mysql}:/var/lib/mysql
      - ${MYSQL_LOG_DIR-./logs/mysql}:/var/log/mysql
    environment:
      MYSQL_ROOT_PASSWORD: tiger
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: 'sc-phpmyadmin'
    links:
      - mysql
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
    ports:
      - '8080:80'
    volumes: 
      - /sessions
  redis:
    container_name: 'sc-redis'
    image: redis:latest
    ports:
      - "6379:6379"
  mongo:
    container_name: 'mongodb'
    image: mongo:4.0.12-xenial
    restart: 'always'
    ports:
      - "${HOST_MACHINE_MONGO_PORT}:27017"
    volumes: 
      - ${MONGO_DATA_DIR-./data/mongodb}:/data/db
      - ${MONGO_LOG_DIR-./logs/mongodb/mongod.log}:/var/log/mongodb/mongod.log
      - ${MONGO_CONF-./config/mongodb/mongod.conf}:/etc/mongod.conf

【问题讨论】:

  • mysql 适用于带有mysqli 的主机名?
  • 你的意思是本地主机吗?如果我将 127.0.0.1 更改为 localhost,pdo 不会给出文件错误

标签: php mysqli pdo


【解决方案1】:

我找到了连接不工作的原因,是因为连接试图连接到8888端口。当它需要连接到8889端口时。

$conn = new PDO("mysql:host=127.0.0.1;port=8889;dbname=docker", "root", "tiger"); 

要在端口上查找侦听器,请执行以下操作:

netstat -tln

如果 MySQL 确实在侦听该端口,您应该会看到如下所示的一行。

tcp        0      0 127.0.0.1:3306              0.0.0.0:* 

端口 3306 是 MySql 的默认端口。

如果您想知道运行 Mysql 的本地主机的端口号,您可以在 MySQL 命令行客户端上使用此查询 --

SHOW VARIABLES WHERE Variable_name = 'port';


mysql> SHOW VARIABLES WHERE Variable_name = 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.00 sec)

它将为您提供 MySQL 正在运行的端口号。

【讨论】:

  • 感谢您的输入,我的 mysql 确实在 3306 上运行,我确实运行了 SHOW VARIABLES WHERE Variable_name = 'port';它证实了这一点。我改变了我原来的帖子
  • 您的 PDO 连接不正常?您是否尝试过我在回答中提到的端口。
  • 是的,我的 pdo 不工作,我添加了 port=3306,仍然不工作
猜你喜欢
  • 2019-08-21
  • 2015-03-29
  • 2021-07-10
  • 2017-05-04
  • 1970-01-01
  • 2017-09-20
  • 2020-03-26
  • 2020-12-04
  • 2020-02-27
相关资源
最近更新 更多