我用Windows开发了一个项目。我使用过PHP、MySQL (使用PDO)和Apache。
我用代码创建了数据库和表。没什么问题。
我试图在我的Ubuntu18.04机器上修改这个项目。相信我,我从早上开始就一直在尝试这个。
该项目在本地主机上使用CSS、JavaScript顺利运行。但是添加到数据库时会出现错误。我收到的错误代码是:找不到驱动程序。php.ini文件丢失
我的apache2文件夹也不应该放在etc/php/7.2中。
我得到了SQLSTATEHY000无法分配请求的地址错误,我是这样连接的:
$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
└── src
├── css
│ ├── css
│ │ └── dashboard.css
│ ├── fonts
│ │ └── feather
│ │ ├── feather-webfont6cfa.eot
│ │ ├── feather-webfont6cfa.svg
│ │ ├── feather-webfont6cfa.ttf
│ │ └── feather-webfont6cfa.woff
│ └── style.css
├── docker-compose.yml
├── js
│ ├── guncelle.js
│ └── resimler.js
└── php
├── about.php
├── categories.php
├── create_database.php
├── footer.php
├── header.php
├── index.php
├── info.php
├── login.php
└── logout.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发布于 2019-12-30 09:02:31
我找到了解决办法。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>success<br>";
}发布于 2019-12-28 19:16:54
它似乎“此映像附带默认php.ini-开发和php.ini-生产配置文件。”你应该选择一个
# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"https://stackoverflow.com/questions/59514062
复制相似问题