🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

3367閲覧

mysqli_connect()が使えない..on docker

kawaei222

総合スコア6

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2019/10/27 12:35

編集2019/10/28 11:43

問題はタイトルの通りです。。。

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

php-mysqlnd はインストールされていますか

投稿2019/10/27 13:57

yukky1201

総合スコア2751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kawaei222

2019/10/28 11:24

返信遅れて申し訳ありません。 私dockerやPHP初心者なのですが、そのphp-mysqlndとphp-mysqli?では何が違うのでしょうか。 追記の通り、dockerfileを更新してbuildしても同様のエラーが出てしまいました。 お時間を取ってしまい申し訳ありません。
kawaei222

2019/10/28 11:41

やっぱりできました!!! php-mysqliをインストールしたら解決しましたがphp-mysqlndとの違いはっきり理解していないので自分で調べることにします!! 本当に助かりました!!ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問