🎄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回答

3398閲覧

phpからmysql接続エラー(未定義関数mysqli_connect()の呼び出しスタックトレース)

Qoo

総合スコア1249

MySQL

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

PHP

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

Docker

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

0グッド

0クリップ

投稿2020/12/30 14:19

お世話になります

dockerにてlemp環境を作り、phpからmysqlに接続する勉強中です
http://localhost:10080/phpinfo.phpを実行するとmysqlndのバージョンは 7.4.13が表示されています
mysqliもインストールしているのですが、下記phpファイルを実行すると
「未定義関数mysqli_connect()の呼び出しスタックトレース」とエラーになってしまいます

php

1 2<?php 3 4// データベースへの接続に必要な変数を指定 5$host = 'localhost:8888'; 6$username = 'root'; 7$passwd = 'secret'; 8$dbname = 'db_test'; 9 10// データベースへ接続 11$db = mysqli_connect($host, $username, $passwd, $dbname); 12 13// 接続チェック 14if (!$db) { 15 die('データベースの接続に失敗しました。'); 16} 17 18echo "データベースの接続に成功しました! \n"; 19 20// データベースの接続を閉じる 21mysqli_close($db); 22 23?> 24

念のため、docker exec -it app bashでコンテナの中に入り
php -r "phpinfo();" | grep mysqli で確認すると下記のように表示されているので、
mysqli自体はインストールできていると思うのですが、未定義?になるのはなぜなのでしょうか??

lchain/usr/bin/bison'
mysqli
mysqli.allow_local_infile => Off => Off
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqli.rollback_on_cached_plink => Off => Off
API Extensions => pdo_mysql,mysqli

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

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

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

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

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

yambejp

2020/12/30 14:29

ポート8888はほんとに合っていますか?
m.ts10806

2020/12/31 00:11

PDOではどうなのでしょうか。 あと、try-catchしてみてください。
ockeghem

2020/12/31 01:57

エラーの内容をコピペして追記してください。要約ではなく完全なものを提示してください。
Qoo

2020/12/31 03:14

ポート8888は http://localhost:8888/でmysqladminのページが表示できるので8888だと思ったのですが認識として間違っていますでしょうか?? PDOは知識としてなかったので、調べてみますね。 エラーの内容は下記のとおりです。 mysqli_connect自体が使えないよって感じかなと思ったので、接続以前の問題なのかなっおもっていました。 Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /work/public/rem10/mysql.php:10 Stack trace: #0 {main} thrown in /work/public/rem10/mysql.php on line 10
Qoo

2020/12/31 03:45

再度、phpのコンテナに入りphp-mでモジュールを確認してみたら mysqliが入っていない?ということなのでしょうか。。 [PHP Modules] bcmath Core ctype curl date dom fileinfo filter ftp hash iconv intl json libxml mbstring mysqlnd openssl pcre PDO pdo_mysql pdo_sqlite Phar posix readline Reflection session SimpleXML sodium SPL sqlite3 standard tokenizer xml xmlreader xmlwriter zip zlib
Qoo

2020/12/31 03:59

dockerファイルにmysqliを追加して、再度ビルドしたあと、dockerを再起動すると無事、mysqliが表示されました。。 が、エラーの内容が変わりました。。一応、mysqliは読み込めたけど、接続ができないよってことなのかな。。 Warning: mysqli_connect(): (HY000/2002): No such file or directory in /work/public/rem10/mysql.php on line 10 データベースの接続に失敗しました。 --- docker file --- RUN apt-get update && \ apt-get -y install git unzip libzip-dev libicu-dev libonig-dev && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ docker-php-ext-install intl mysqli pdo_mysql zip bcmath --- コンテナ内で確認 ---------- [PHP Modules] mbstring mysqli mysqlnd ----------------
Qoo

2020/12/31 04:11 編集

ぐぐったらこちらのページにたどり着きました。 dockerでのサーバの接続は少し特殊なようでhostにymlで指定したコンテナ名を入れることで 無事接続することができました。 https://qiita.com/gat3ta/items/562e227e1c778445cced ------------------------- $host = 'db'; //←ymlで指定したコンテナ名 $username = 'root'; $passwd = 'secret'; $dbname = 'db_test'; // データベースへ接続 $db = mysqli_connect($host, $username, $passwd, $dbname); ------------------------- ありがとうございました。
guest

回答1

0

自己解決

アドバイス頂き、無事解決することができました。

投稿2020/12/31 04:08

Qoo

総合スコア1249

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問