“无法找到”和“ SQLSTATE [HY000] [2002]”错误

问题描述 投票:0回答:2

我在Windows中开发了一个项目。我使用过PHP,MySQL(使用PDO)和Apache。

我用代码创建了数据库和表。没问题。

我正在尝试在我的Ubuntu 18.04计算机上对该项目进行Docker化。相信我,从早上开始我就一直在尝试此。

该项目在本地主机上使用CSS和JavaScript可以顺利运行。但是在添加到数据库时会给出错误。我收到的错误代码是:找不到驱动程序。php.ini file is missing

I also don't have my apache2 folder that should be in etc/php/7.2.

我得到SQLSTATE [HY000] [2002]无法分配请求的地址错误,我通过这种方式建立了连接:$ db = new PDO(“ mysql:host = $ this-> servername; charset = utf8”,$ this-> username,$ this-> password);$ db-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);

我得到无法找到驱动程序错误,我通过这种方式建立了连接(使用pdo_mysql):$ db = new PDO(“ pdo_mysql:host = $ this-> servername; charset = utf8”,$ this-> username,$ this-> password);$ db-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);

我已经在Dockerfile中安装了apache2和php。

有docker-compose.yml和Dockerfile文件:

# DOCKERFILE
FROM php:7.3-apache
RUN apt-get update
RUN apt-get install -y git
RUN docker-php-ext-install pdo pdo_mysql mysqli
RUN a2enmod rewrite
#Install Composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php --install-dir=. --filename=composer
RUN mv composer /usr/local/bin/
COPY src/ /var/www/html/
EXPOSE 80

# DOCKER-COMPOSE.YML
version: '3'
services:
  mysql:
        image: mysql:8.0
        container_name: vt_album
        command: --default-authentication-plugin=mysql_native_password
        volumes:
          - .:/application
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=2222
          - MYSQL_PASSWORD=2222
        ports:
          - "3306:3306"
  website:
    container_name: php_album
    build:
      context: ./
    volumes:
      - ./src/:/var/www/html
    ports:
      - 8080:8080
    depends_on:
      - mysql
php pdo docker-compose apache2 ubuntu-18.04
2个回答
0
投票

似乎“此映像随附了默认的php.ini-development和php.ini-production配置文件。”您应该选择一个

# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"

0
投票

我找到了解决方案。 dockerfile和docker-compose.yml文件与问题中的文件相同。没有变化。但是,当连接到数据库时,应编写“ mysql:host = mysql”而不是“ mysql:host = localhost”。这里的第二个“ mysql”代表我们在docker-compose.yml文件中定义的服务名称。

以下代码首先创建数据库。然后,它创建连接对象。然后,它调用相关方法来创建表。

    protected $conn;
    protected $username = "root";
    protected $password = 2222;
    protected $dbname = "db_2";

    function _construct(){
        $db = new PDO("mysql:host=mysql;charset=utf8; port:3306", $this->username, $this->password);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $database = "CREATE DATABASE IF NOT EXISTS ".$this->dbname.";ALTER DATABASE ".$this->dbname." CHARACTER SET utf8 COLLATE utf8_turkish_ci;";

        $db->exec($database);

        $this->conn=new PDO("mysql:host=mysql;charset=utf8;port:3306", $this->username, $this->password);
        $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $this->create_table_categories();
        $this->create_table_users();
        $this->create_table_files();

        return "<br>basarili<br>";
    }

© www.soinside.com 2019 - 2024. All rights reserved.