我目前正在尝试学习如何使用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服务器正在运行。
有人可以为此提供任何帮助吗?
谢谢
斯科特