致命错误:使用Docker在LAMP堆栈上使用未捕获的PDOexception

时间:2019-02-28 22:09:30

标签: php apache docker docker-compose mariadb

我目前正在尝试学习如何使用docker-compose对apache,php和mariadb创建LAMP堆栈,并在尝试通过PHP链接到我的数据库时遇到了此错误。

错误

  

严重错误:未捕获PDOException:在/var/www/html/index.php:5中找不到驱动程序:堆栈跟踪:#0 /var/www/html/index.php(5):PDO-> __ construct( “ mysql:host = data ...”,“ admin”,“ password”)#1 {main}放在第5行的/var/www/html/index.php中”

错误似乎与我使用PDO有关,我的主机名设置是否错误?

PHP文件:

<?php

   $value = "World";

    $db = new PDO('mysql:host=database;dbname=db;charset=utf8mb4', 'admin', 
  'password');

$databaseTest = ($db->query('SELECT * FROM test'))- 
  

fetchAll(PDO :: FETCH_OBJ);

?>

<html>
    <body>
        <h1>Hello, <?= $value ?>!</h1>

        <?php foreach($databaseTest as $row): ?>
        <p>Hello, <?= $row->name ?></p>
        <?php endforeach; ?>
    </body>
</html>

Docker-Compose.yml

version: '3'
services:
    php-apache:
        image: php:7.2.1-apache
        ports:
            - 80:80
        volumes:
            - ./DocumentRoot:/var/www/html:z
        links:
            - 'mariadb'

    mariadb:
        image: mariadb:10.1
        volumes:
            - mariadb:/var/lib/mysql
            - ./db/data.sql:/docker-entrypoint-initdb.d/data.sql
        environment:
            TZ: "Europe/London"
            MYSQL_ALLOW_EMPTY_PASSWORD: "no"
            MYSQL_ROOT_PASSWORD: "password"
            MYSQL_USER: 'admin'
            MYSQL_PASSWORD: 'password'
            MYSQL_DATABASE: 'db'

volumes:
    mariadb:
    db:

数据文件:

DROP TABLE IF EXISTS `test`;

CREATE TABLE `test` (
  `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

LOCK TABLES `test` WRITE;

INSERT INTO `test` VALUES ('George'),('Sam'),('Kathy');

UNLOCK TABLES;

如果我使用php info()检查,则Web服务器正在运行。

有人可以为此提供任何帮助吗?

谢谢

斯科特

0 个答案:

没有答案