問題はタイトルの通りです。。。
Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /var/www/html/index.php:25 Stack trace: #0 {main} thrown in /var/www/html/index.php on line 25
と表記されてしまいます。
何が原因なのでしょうか?
環境はDocker上で、一番最後に貼ったURLを参考(コピペして)しました。
問題が発生したのは書籍パーフェクトPHPのP182をやっているところでした。
まず開発環境の詳細を貼ります。
下記の通り、PHP:7.2,mysql:5.7です。
//ディレクトリ構造 ├── docker-compose.yml ├── nginx │ └── nginx.conf ├── php │ ├── Dockerfile │ └── php.ini ├── mysql │ └── data └── www └── html └── index.php
//docker-compose.yml version: '3' services: nginx: image: nginx:latest ports: - 8080:80 volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf - ./www/html:/var/www/html depends_on: - php php: build: ./php volumes: - ./www/html:/var/www/html depends_on: - db db: image: mysql:5.7 ports: - 13306:3306 volumes: - ./mysql/data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: secret phpmyadmin: image: phpmyadmin/phpmyadmin:latest ports: - 8888:80 depends_on: - db
//Dockerfile FROM php:7.2-fpm COPY php.ini /usr/local/etc/php/
//index.php . . 省略 . . <?php //データベースに接続 $link=mysqli_connect('php_db_1','root','secret'); //問題はここ!!! if(!$link){ die('can not connect database:'.mysql_error()); } //データベースを選択 mysqli_select_db('online_bbs',$link); $errors=array(); //POSTなら保存処理実行 if($_SERVER['REQUEST_METHOD']==='POST'){ //名前が正しく入力されているかチェック $name=null; if(!isset($_POST['name']) || !strlen($_POST['name'])){ $errors['name']='名前を入力してください'; }elseif(strlen($_POST['name'])>40){ $errors['name']='名前は40文字以内で入力してください'; }else{ $name=$_POST['name']; } //ひとことが入力されているかチェック $comment=null; if(!isset($_POST['comment'])|| !strlen($_POST['comment'])){ $errors['comment']='ひとことを入力してください'; }else if(strlen($_POST['comment'])>200){ $errors['comment']='ひとことは200文字以内で入力してください'; }else{ $comment=$_POST['comment']; } //エラーがなければ保存 if(count($errors)===0){ //保存するためのSQL文を作成 $sql="INSERT INTO post(name,comment,created_at)VALUES('".mysql_real_escape_string($name)."','".mysql_real_escape_string($comment)."','".date('Y-m-d H:i:s')."')"; //保存する mysql_query($sql,$link); } } ?>
試したこと
いろいろ調べて、
=new mysqli() だと、 Fatal error: Uncaught Error: Class 'mysqli' not found in /var/www/html/index.php:25 Stack trace: #0 {main} thrown in /var/www/html/index.php on line 25
=mysql_connect() だと当然、 Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /var/www/html/index.php:25 Stack trace: #0 {main} thrown in /var/www/html/index.php on line 25
調べ不足は承知の上ですが、原因は何なのか等でもアドバイスだけでも頂きたいです。。
よろしくお願いします。。。
引用したサイト
追記
mysqli関数を使えるようにdockerfileを以下のように書き換え、buildし直したらいけました!!
ただphp-mysqliモジュールをインストールしていないだけでした!
FROM php:7.2-fpm COPY php.ini /usr/local/etc/php/ RUN apt-get update && docker-php-ext-install mysqli pdo_mysql
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/28 11:24
2019/10/28 11:41