質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

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

PHP

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

Q&A

解決済

5回答

1746閲覧

PHPからMySQLのバージョンを確認する方法はありますか?

phpman

総合スコア16

MySQL

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

PHP

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

0グッド

1クリップ

投稿2020/08/26 07:27

編集2020/09/24 11:47

https://teratail.com/users/m.ts10806
↑こちらの方が、MySQL5.6と8.0の両方で動くSQL文が書けるとおっしゃっていますが、どのようにすれば動くのか回答を求めたところ、逃亡されました。

PHPとMySQLの回答者には、最初から相手を見下して、居丈高な回答をしてくる人がいます。
回答する人は、彼を戒めとして下さい。


PHPで、MySQLサーバーのバージョンに応じて、クエリーの組み立てを変えたいと思っていますが、PHPからMySQLサーバーのバージョンを確認する方法はありますでしょうか?

例えば、アプリケーション・サーバーとデータベース・サーバーが別れていた場合でも確認できる方法を探しています。

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

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

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

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

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

maisumakun

2020/08/26 07:31

「PHPコードが複数のデータベースバージョンで動かされることを想定しないといけない」というのは、具体的にどのような状況でしょうか。 (想定される最低バージョンを前提にコードを書いておく、というような手段で解決することはできないでしょうか)
m.ts10806

2020/08/26 20:58

確認事項投げておきながら解決済みにして無反応とは、どういうおつもりですか? 根本的な解決になってないように思いますが
phpman

2020/08/28 08:43

maisumakun:https://teratail.com/users/maisumakun#reply > 「PHPコードが複数のデータベースバージョンで動かされることを想定しないといけない」というのは、具体的にどのような状況でしょうか。 作成しているソフトウェアがMySQL5.xとMySQL8.0をサポートしている状況です。 > (想定される最低バージョンを前提にコードを書いておく、というような手段で解決することはできないでしょうか) できません。
maisumakun

2020/08/28 08:44

> 作成しているソフトウェアがMySQL5.xとMySQL8.0をサポートしている状況です。 なぜ両方サポートしないといけなくなったのでしょうか?
phpman

2020/08/28 08:48

m.ts10806:https://teratail.com/users/m.ts10806#reply > 確認事項投げておきながら解決済みにして無反応とは、どういうおつもりですか? 確認事項とは何のことでしょうか? > 根本的な解決になってないように思いますが タイトルをご確認ください。根本的な解決策がベストアンサーになっています。 あなたの提示した内容はただのイチャモンで、解決策ではありません。 あなたをベストアンサーにすることはできません。ご了承ください。
phpman

2020/08/28 08:52

maisumakun:https://teratail.com/users/maisumakun#reply > > 作成しているソフトウェアがMySQL5.xとMySQL8.0をサポートしている状況です。 > なぜ両方サポートしないといけなくなったのでしょうか? うざいんでもう書き込まないで下さい。
m.ts10806

2020/08/28 09:11

やりたいことが全て良いとは限らないと言ってるのが分からないようなので既にこのアプリケーションは破綻してます。 確実に直面する問題を避けようとしないのですから。
phpman

2020/08/28 11:29

m.ts10806:https://teratail.com/users/m.ts10806#reply > やりたいことが全て良いとは限らないと言ってるのが分からないようなので既にこのアプリケーションは破綻してます。 > 確実に直面する問題を避けようとしないのですから。 興奮し過ぎです。ミルクでも飲んで落ち着いて下さい。 あなたが社会に出て実務を経験したら、自分が子供だった事が分かりますよ。明日の学校も頑張って下さい。
phpman

2020/08/28 11:33

知らないのに頑張って書き込もうとするから恥をかくんですよ?
guest

回答5

0

滅茶苦茶悪手だと思います。
それなら「どちらでも通るSQL」で組むか、DBの種類やバージョンを意識せずに済む仕組み(フレームワークなど)を利用するべきです。

投稿2020/08/26 07:33

m.ts10806

総合スコア80875

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

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

phpman

2020/08/26 07:51

なるほど。それでは具体的にお伺いしたいのですが、MySQL5.xまではmysql.userテーブルにpasswordカラムがあったのですが、MySQL8.0からmysql.userテーブルのpasswordカラムはなくなりました。 MySQL5.xまでは、以下のクエリーでパスワードが取得できましたが、MySQL8.0では取得できなくなりました。 MySQL5.x と MySQL8.0 の「どちらでも通るSQL」を教えて頂けますでしょうか? ``` SELECT `host`, `user`, `password` FROM `mysql`.`user` ```
m.ts10806

2020/08/26 07:56

その手の前提全くないまま振られて戸惑ってます。 では、先にお聞きしたいのですけど、 アプリケーション側から `mysql`.`user`のテーブルを参照するときってどういうときですか? もっと言えば、バージョンが変わればまたそれだけコードを組みなおすのですか?アプリケーションが大きければ大きくなるほど何百行、何千行のコードを書いていくことになりますが、保守性・メンテナンス性は大丈夫ですか? それなら下位互換のあるコード1本だけ書くようにした方が良いという話になります。 どこまでのものを考えて、バージョン毎に組み立てようとしているのか分かりません。
maisumakun

2020/08/26 07:56

どのような状況で、「5.xと8.0の両方で動かす」必要が生じたのか、そちらの背景がまず疑問です。
phpman

2020/08/28 08:49

maisumakun:https://teratail.com/users/maisumakun#reply > どのような状況で、「5.xと8.0の両方で動かす」必要が生じたのか、そちらの背景がまず疑問です。 背景とは関係ありません。もう少し実務経験を積んでから回答者になって下さい。
phpman

2020/08/28 08:50

m.ts10806:https://teratail.com/users/m.ts10806#reply その手の前提全くないまま振られて戸惑ってます。 では、先にお聞きしたいのですけど、 アプリケーション側から `mysql`.`user`のテーブルを参照するときってどういうときですか? もっと言えば、バージョンが変わればまたそれだけコードを組みなおすのですか?アプリケーションが大きければ大きくなるほど何百行、何千行のコードを書いていくことになりますが、保守性・メンテナンス性は大丈夫ですか? それなら下位互換のあるコード1本だけ書くようにした方が良いという話になります。 どこまでのものを考えて、バージョン毎に組み立てようとしているのか分かりません。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー つまり分からないという事ですよね?
maisumakun

2020/08/28 09:16 編集

> 背景とは関係ありません。 いえ、背景事情によっては「真っ正直に両対応する」以外の手段もあると考えての確認です。 「両バージョンをサポートすることが仕様であって変更の余地がない」のであれば、そう書いていただければそれは前提として考えます。
m.ts10806

2020/08/28 09:10

回答理解できないのでしたらそのように仰ってください。下手に煽ったところで実務経験に基づくアドバイスは得られませんし、聞く耳もたない人にわざわざそこまでの労力は見せません。それを「もう少し実務経験積んでから」ってかなりふざけてます。 「バージョンによって別々のコードが混在するのが異常」だと思わないのでしたら、お話になりません。
phpman

2020/08/28 11:19

maisumakun:https://teratail.com/users/m.ts10806#reply > > > 背景とは関係ありません。 > > いえ、背景事情によっては「真っ正直に両対応する」以外の手段もあると考えての確認です。 > 「両バージョンをサポートすることが仕様であって変更の余地がない」のであれば、そう書いていただければそれは前提として考えます。 すいません、鬱陶しいです。 『両バージョンをサポートすることが仕様であって変更の余地がない』んです。 そんな事も分からないんですか? ちなみに、ベストアンサーの方はそれらも全て含んで、回答だけをサクッと提示してます。 あなたがベストアンサーを貰えない理由はそういう鬱陶しい性格だと思いますよ?
maisumakun

2020/08/28 11:27 編集

> そんな事も分からないんですか? はい、phpmanさんに提示してもらわないとわからないです。判断対象となるのは、質問や追記に書かれたことが全てです。
maisumakun

2020/08/28 11:28 編集

> あなたがベストアンサーを貰えない理由はそういう鬱陶しい性格だと思いますよ? 別にベストアンサーをもらいたくてやっているわけではありませんので、ご心配なく。 …というより、この質問に追記依頼とコメントしかしていない自分がベストアンサーをもらう可能性はもともとなかったですね。
phpman

2020/08/28 11:23

m.ts10806:https://teratail.com/users/m.ts10806#reply すみません、もう書き込まないで貰えますか? > 回答理解できないのでしたらそのように仰ってください。下手に煽ったところで実務経験に基づくアドバイスは得られませんし、聞く耳もたない人にわざわざそこまでの労力は見せません。それを「もう少し実務経験積んでから」ってかなりふざけてます。 そんなに興奮しないで下さい。もっと落ち着いて書き込んで下さい。 ベストアンサーが貰えなかったのが悔しかったんですか? しょうがないじゃないですか、あなたは回答を提示できていないんだから。 > 「バージョンによって別々のコードが混在するのが異常」だと思わないのでしたら、お話になりません。 全く異常ではありません。あなたの見ている世界が狭いだけです。趣味でプログラムをやってる学生の方ですか?
phpman

2020/08/28 11:26

maisumakun:https://teratail.com/users/maisumakun#reply > > あなたがベストアンサーを貰えない理由はそういう鬱陶しい性格だと思いますよ? > 別にベストアンサーをもらいたくてやっているわけではありませんので、ご心配なく。 てっきりベストアンサーが欲しい子なのかと思ってました。頑張って下さい。もう書き込まなくて良いです。
m.ts10806

2020/08/28 21:11 編集

煽りたいだけなら5ちゃんねるでもTwitterでもどうぞ。 本気で問題解決したい人が集まる場所です。ベストアンサーもらいたいわけでも、質問者だけのための回答をしているわけでもないです。teratailの主旨を理解してから利用してください。説明書読まずに利用するのはありえませんよね。大人なら。 「MySQLのバージョンの調べ方」なんてそのまま調べれば分かることを質問している時点で、一歩踏み込んで考えるのがエンジニアです。 なぜそうする必要があるのか?本当にそうする必要があるのであればそのための施策を考えなければならない。 けど、あなたは「知りたいことだけ答えればよい」とお客様思考のままです。お客様したいのでしたら別のところで然るべき対価を支払いお客様扱いしてもらうと良いです。回答者はあなたの道具でも手足でもありません。
退会済みユーザー

退会済みユーザー

2020/08/28 21:07

この質疑だけ見たら、「どちらでも通るSQL」書いて、プログラム側で分岐するのが適切でしょうね^^;
m.ts10806

2020/08/28 21:12

te2jiさん 読み違えてたらすみません。 どちらでも通るのでしたら分岐必要ないのでは?
退会済みユーザー

退会済みユーザー

2020/08/28 21:23

あー、フェッチモードうまく使えば、分岐もいらんかもね。
m.ts10806

2020/08/29 00:07 編集

te2jiさん はい。そこも含めて「どちらでも通る」を回答として書いてます。分岐が増えれば増えるだけ仕様変更に弱くなってテストも増えて不具合も潜り込みやすくなって いいとこないですから。 設計見直すところから必要に思いました。手段先行でまともなアプリケーションができるわけないので。
phpman

2020/08/29 13:03

m.ts10806:https://teratail.com/users/m.ts10806#reply te2jiさん はい。そこも含めて「どちらでも通る」を回答として書いてます。分岐が増えれば増えるだけ仕様変更に弱くなってテストも増えて不具合も潜り込みやすくなって いいとこないですから。 設計見直すところから必要に思いました。手段先行でまともなアプリケーションができるわけないので。 実務経験ない人が偉そうに言うの恥ずかしいですよ。
phpman

2020/08/29 13:03

te2ji > この質疑だけ見たら、「どちらでも通るSQL」書いて、プログラム側で分岐するのが適切でしょうね^^; おっしゃるとおりです。実務経験のある人は回答が明確ですね。
phpman

2020/08/29 13:04

m.ts10806:https://teratail.com/users/m.ts10806#reply 煽りたいだけなら5ちゃんねるでもTwitterでもどうぞ。 本気で問題解決したい人が集まる場所です。ベストアンサーもらいたいわけでも、質問者だけのための回答をしているわけでもないです。teratailの主旨を理解してから利用してください。説明書読まずに利用するのはありえませんよね。大人なら。 「MySQLのバージョンの調べ方」なんてそのまま調べれば分かることを質問している時点で、一歩踏み込んで考えるのがエンジニアです。 なぜそうする必要があるのか?本当にそうする必要があるのであればそのための施策を考えなければならない。 けど、あなたは「知りたいことだけ答えればよい」とお客様思考のままです。お客様したいのでしたら別のところで然るべき対価を支払いお客様扱いしてもらうと良いです。回答者はあなたの道具でも手足でもありません。 だったらもう書き込まないで貰えますか?あなたは必要ないので。
退会済みユーザー

退会済みユーザー

2020/08/29 22:20

> おっしゃるとおりです。実務経験のある人は回答が明確ですね。 はい。実務経験があれば、こういった前提の不明瞭な要件は再整理し、最も単純な方法で実装できないか検討します。まぁ、私のコメントは、要件が不明瞭なまま進めなければならないデスマ的なものを前提に単純な実装のみにフォーカスしてますがw
m.ts10806

2020/08/29 22:51

>実務経験ない人が 根拠ない決めつけを続けても良いことないですよ。通報しました。 >だったらもう書き込まないで貰えますか?あなたは必要ないので。 質問者ではなく質問内容を見て回答してるので、わざわざ覚えなきゃいけないのはなぜですか?1ユーザーにそのような強制権限はありません。 私はteratailでしか回答者としてはやってないので、PHPやMySQLといった、私が主としているところから外れるか、別の質問サイト使えば会わなくて済みますよ。 要件不明瞭なところをどこも明確にせず決めつけと勘違いで勝手に怨み節してるのはそちらなので、そちらこそ私と遭わない努力をしたら如何でしょうか。 ただ、このようなやりとりは他の回答者も見ているので、同じやり方を続ける限りは同じ指摘をされ続けるでしょうし、応える人も減っていくのでは。
m.ts10806

2020/08/30 00:39 編集

それにね。 実務経験=プロとしての意見 を聞きたいならそれなりの対価支払わないと出すわけないじゃないですか。他の回答者(プロのエンジニアとして従事する人)も、実務のつもりで回答に取り組んでる人ってそういないんじゃないですかね。 専門家の意見を聞きたいなら対価は必要です。そうでない、それなりの「ヒント」がアドバイスとしてつくのが基本的な無償のQAサイトです。 本気で実務レベルの対応が必要なことであれば無償のQAサイトで済まそうとしてる時点であなたの本気度は知れてます。 と、他の方も言い方をかえて指摘してます。 皮肉られたことも気づかないようですし、無償のQAサイトのガイドラインも守れてないので質問につけられた丸投げの低評価は極めて妥当な指摘です。 指摘をされて受け入れるどころか根拠のない決めつけで中傷まで始めたわけですから。
phpman

2020/08/30 07:00

te2ji > > おっしゃるとおりです。実務経験のある人は回答が明確ですね。 > はい。実務経験があれば、こういった前提の不明瞭な要件は再整理し、最も単純な方法で実装できないか検討します。 全くその通りです。バージョンによって分けるのが、最も単純で簡単で不具合の発生しにくい実装と判断しました。 MySQL5.7以降は同じSQLでは実行できない状況があることを知らない人がいてウケます。
phpman

2020/08/30 07:04

m.ts10806 SELECT password` FROM `mysql`.`user` 上記SQLですが、MySQL5.6ではpasswordが取得できますが、MySQL8.0ではカラム名がauthentication_stringに変わっているので取得できません。 バージョンでSQLを分岐させずに、MySQL5.6でも8.0でも取得できるSQL文を教えて下さい。
maisumakun

2020/08/30 08:05

1つ気になったのですが、phpmanさんの開発しているプログラムは、「MySQLを管理することそのものが主たる機能のソフトウェア」なのでしょうか? 一般的な「保存先としてMySQLを使う」プログラムと、「MySQLの管理が仕事」というプログラムでは、論点が大きく違ってきます(自分自身、前者を前提として話をしていました)。
m.ts10806

2020/08/30 09:36

前にも確認してスルーされたままですが、`mysql`.`user`をアプリケーションから直接参照しなければならない要件を具体的に記載してください。 接続時に接続先のバージョンが不定であるという要件もあわせてご提示ください。 前提条件を確実にしないまま、ホシイホシイでは話になりません。 バージョンを接続の度に確認しなければならないようなパフォーマンスにもメンテナンス性にも多大に影響するような手だけが選択肢とは思えません。
m.ts10806

2020/08/30 09:37

あと、「実務経験がない」「知らないのに頑張って書き込もうとする」などの決めつけ発言は謝罪してください。 教えてもらいたいなら尚更、自身のふるまいは省みてください。
m.ts10806

2020/08/30 09:53 編集

前の質問の回答に書いた最初のSQLを使えばバージョンに関係ないことは気づきませんか?あとはPHP側で如何様にもできます。 だから同じようなことを何回も書かないわけで、パスワードカラムだけのためにバージョンを取得しなければならない要件がなんなのかは書かれないと分かりません。書いてないことは誰にも伝わりません。 特別な要件があるならそれも考慮した回答にする必要がある。 mysql.userを直接参照するのはなぜか?パスワードカラムだけのためか、他にもあるのか? 「どこまで考慮して決めた要件なのか」はどこにも書いてません。それをはじめから問うています。一般的にはフレームワークを利用するのでバージョンはおろかDBの種類すら開発者は意識しません。そして、フレームワークを使わなくても複数のバージョンに向けてコードを書くことはないです。 そうしなきゃならないのはどういう状況か? 知ってるのは質問者だけなので、質問者が伝えるしかないですよね。
m.ts10806

2020/08/30 23:40 編集

というわけで、答えたので謝罪してください。 あなたが喧嘩を売った全ての人に。
退会済みユーザー

退会済みユーザー

2020/08/31 00:01

> phpman さん > バージョンによって分けるのが、最も単純で簡単で不具合の発生しにくい実装と判断しました。 それを推奨するような趣旨のコメントをした覚えはないのですが^^; > m.ts10806 さん > あとはPHP側で如何様にもできます。 私もその方向性でよいと思っていたんですけど、5.7.6 以上から未満のモノにダウングレードした場合に問題が発生しそうです。 https://dev.mysql.com/doc/refman/5.7/en/downgrading-to-previous-series.html これ、認証 plugin 絡みのカラム変更だろうから、結構根が深そう。 背景確認できないのが残念ですね。
m.ts10806

2020/08/31 00:11

>5.7.6 以上から未満のモノにダウングレードした場合に問題が発生しそうです。 あまり古いものとなるとサポートも気にする必要がありそうですが、やはりフレームワーク使うのが良ですね。 ただ、フレームワークの環境要件次第では対応されてないかもしれませんが。 結局、どこまで考える必要があるのか、はたまた考えなくてもよくするようにするか 次第。
退会済みユーザー

退会済みユーザー

2020/08/31 01:15

mysql.user なんてところは、フレームワークの管理外じゃないかなぁ。 普通のアプリでそんなところ触る必要ないし。 DB 接続情報まとめた箇所にバージョン書いといて、スクリプトで分岐ってのが現実的な気がします。 まぁ、質問者が要件も背景も出さないって言ってるんで、どーでもいいですけどw
m.ts10806

2020/08/31 01:23 編集

はい。mysql.user を直接見にいかなきゃいけないことってアプリケーションからはまず起きない話ですし、チーム開発だと見る権限すらもらえないメンバーもいる。 質問の「バージョンの取り方」だけなら調べればすぐに出てくる内容です。 実務経験が少しでもあれば「見なきゃいけない理由」が気にならない人はいないでしょうね。
phpman

2020/09/02 09:27

maisumakun 1つ気になったのですが、phpmanさんの開発しているプログラムは、「MySQLを管理することそのものが主たる機能のソフトウェア」なのでしょうか? 一般的な「保存先としてMySQLを使う」プログラムと、「MySQLの管理が仕事」というプログラムでは、論点が大きく違ってきます(自分自身、前者を前提として話をしていました)。 私が開発しているのは、MySQLだけではなく、MySQL・PostgreSQL・SQLite・SQL Serverをまとめて管理するプログラムです。
phpman

2020/09/02 09:34

m.ts10806 > 前にも確認してスルーされたままですが、`mysql`.`user`をアプリケーションから直接参照しなければならない要件を具体的に記載してください。 データベース管理のプログラムの開発で、アプリケーションのデータベース初期化時に、ユーザーアカウントも自動作成するので、configファイルに記載されているパスワードと一致しているか確認し、一致していなければパスワードを初期化するプログラムです。 > 接続時に接続先のバージョンが不定であるという要件もあわせてご提示ください。 開発しているデータベース管理のプログラムはOSSで提供されているので、利用者のデータベースのバージョンは開発者では分かりません。5.6の場合もあれば、8.0の場合もあります。 > 前提条件を確実にしないまま、ホシイホシイでは話になりません。 欲しいのではありません。5.6と8.0でバージョンを超えて使える統一的なSQL文があるとおっしゃるので、だったら書いてみて下さいと言ってるだけです。 > バージョンを接続の度に確認しなければならないようなパフォーマンスにもメンテナンス性にも多大に影響するような手だけが選択肢とは思えません。 勝手な妄想です。
phpman

2020/09/02 09:36

m.ts10806 > というわけで、答えたので謝罪してください。 > あなたが喧嘩を売った全ての人に。 その前に、MySQL5.6と8.0でバージョンを分けなくても書けるSQL文を提示して下さい。
maisumakun

2020/09/02 10:07

> 私が開発しているのは、MySQLだけではなく、MySQL・PostgreSQL・SQLite・SQL Serverをまとめて管理するプログラムです。 それを先に書いてほしかったです。書かなければ、回答者には伝わりません。 (この前提であれば、「正面から取り組む」以外の選択肢はなさそうですが、それをわからないがためにえんえんやり取りを続ける結果となりました)
phpman

2020/09/02 10:26

> それを先に書いてほしかったです。書かなければ、回答者には伝わりません。 > (この前提であれば、「正面から取り組む」以外の選択肢はなさそうですが、それをわからないがためにえんえんやり取りを続ける結果となりました) 果たしてそうでしょうか?ベストアンサーをご覧ください。くだらないやりとりも煽り合いもありません。 勝手に相手を見下して、先輩ヅラして、妄想で「お前のやり方は悪手だ」と説教を書き込んだから悪いのです。 どう考えても、説教する方が悪いです。
maisumakun

2020/09/02 10:36 編集

> ベストアンサーをご覧ください。くだらないやりとりも煽り合いもありません。 たまたま今回の場合にはよかったのですが、それが回答者側から見て「最善の手段」なのか「悪手」なのかを確定させるためには情報不足だったために、これだけのやり取りが必要だったと、自分としては考えます(バージョン別分岐は、「一般のプログラムであれば」採用したくないものです)。
phpman

2020/09/02 10:36

仮に悪手だったとしても、説教は大きなお世話です。 人には人の都合があります。相手を見下して「お前のやり方は悪手だ」なんて大きなお世話です。
maisumakun

2020/09/02 10:38 編集

>相手を見下して「お前のやり方は悪手だ」なんて大きなお世話です。 自分は今回そのようなことをしていませんが、セキュリティ的・ライセンス的問題を抱えるものなど、実運用しようとするとまずいものには「やめておきましょう」というようにはしています。
退会済みユーザー

退会済みユーザー

2020/09/02 10:45

あー結局悪手でしたね^^; > configファイルに記載されているパスワードと一致しているか確認し、一致していなければパスワードを初期化するプログラムです。 パスワードの検証は、バージョンでは切り分けられません。 一つ前の質問の m.ts10806 さんの回答を素直に追いかけていれば、たどり着いたかの知れないですけど、残念です。 そもそもプログラム側でパスワードの検証をするのは悪手です。 設計変更が必要となるので、今更ですが、上司に相談してください。
phpman

2020/09/02 10:48

今回はセキュリティ的にもライセンス的にも問題はないと思います。 相手の都合を考えずに、勝手に妄想して、悪手だと決めつけるのは、コンピューターオタクに多い独りよがり野郎です。 SQLをバージョンによって分けるのは悪手だと思うのも、経験が浅いと思います。 実運用では、バージョンによって分ける方が可読性もあがり、運用上も最善の場合が多々あります。 できるならバージョンによって分けたくないですが、それでも分けなければいけないから、そうするだけです。
phpman

2020/09/02 10:51

te2ji > パスワードの検証は、バージョンでは切り分けられません。 は?できてますけど? > そもそもプログラム側でパスワードの検証をするのは悪手です。 理由を教えて下さい。くだらない書き込みすると恥をかきますよ?
退会済みユーザー

退会済みユーザー

2020/09/02 10:53

> は?できてますけど? ってことは、やっちゃってますね。 報告は早い方が良いですよ。 > 理由を教えて下さい。くだらない書き込みすると恥をかきますよ? すでに提示してますし^^;
phpman

2020/09/02 10:59

te2ji:https://teratail.com/users/te2ji#reply > ってことは、やっちゃってますね。 > 報告は早い方が良いですよ。 何をやってるのか教えて下さい。 > すでに提示してますし^^; 提示してる箇所を引用して下さい。
退会済みユーザー

退会済みユーザー

2020/09/02 11:00

なんで何回も同じことを書かなきゃならないんですか^^; この回答を上司に見せれば、理解してもらえるので、どうぞ活用してください。
phpman

2020/09/02 11:02

書くんじゃなくて、過去の書き込みを引用して下さい。 私は妄想はしないので、過去の引用を想像で決めつけたりしません。 どの書き込みが該当箇所でしょうか?
phper.k

2020/09/02 11:08 編集

もし仮に、自分がこのタスク与えられたとしたら、phpMyAdmin のソースコード読んで実装するだろうけどな。 あ、その前に「車輪の再開発はやめましょ」って提案するか。
退会済みユーザー

退会済みユーザー

2020/09/02 11:13

> phpman さん ずいぶん「ホシイホシイ」言いますね。 では私からも! 本件を上司に見せて、対応策を自己解凍として記入してください。 そうすれば、私も回答を作成します!
phpman

2020/09/02 11:16

te2ji:https://teratail.com/users/te2ji#reply > ずいぶん「ホシイホシイ」言いますね。 > そうすれば、私も回答を作成します! 回答はいらないです。過去の発言を引用して下さい。
退会済みユーザー

退会済みユーザー

2020/09/02 11:22

いやですよ。なんで phpman さんにそんなこと指示されなきゃいけないんですか^^; まぁ、うざいでしょうから、もう書き込みません。 ご愁傷さまです。
guest

0

mysqliを使用しているのであれば、mysqli::$server_infoで取得できるようです。文字列として取得できるので、SQL発行するよりは簡単だと思われます。PDOの場合は見つかりませんでした。

PHPでMySQLにSQLを直接発行する(所謂ORM等を使わない)プログラムを作成した実務経験は全くないので、間違っていたらすいません。PHPはあまり知らないのだけど、頑張って調べて書いてみました。


データベース管理のプログラムの開発で、アプリケーションのデータベース初期化時に、ユーザーアカウントも自動作成するので、configファイルに記載されているパスワードと一致しているか確認し、一致していなければパスワードを初期化するプログラムです。

このような目的であれば、mysql.userを直接見に行ってパスワードを確認する事はお勧めできません。実際にそのユーザーとパスワードで接続可能であるかを確認する方法に変更することをお勧めします。

お勧めできない理由は、パスワードはハッシュ化されて保存されており、そのハッシュ化方法が将来変更される可能性があるからです。実際4.1でハッシュ化の形式は変更されました。また、サーバーの設定によっては古い方法やSHA256を用いた方法になっている場合があります。つまり、今の段階でもハッシュ化形式によって分岐が必要であり、また、将来のバージョンで追加の実装が必要なってくる可能性があります。

それと比べて、MySQLサーバーへの接続方式は互換性を保つことが期待されます。ですので、実際にそのユーザー名とパスワードでサーバーへ接続すること、ついでに、読み込み書き込みデータベースへの読み込み書き込みテストを行えば確実でしょう。個人的には、PHPで全てやるのではなく、Ansible等を別タスクで実行するような仕組みにすることをお勧めします。

最後に、どのようなデータベースでも使われるようなものにするのであれば、MariaDBへの対応は必ず求められると思います。MySQLとMariaDBは標準的な利用を想定した表面的な互換性はありますが、mysql.user等と言った管理部分の互換性は失われつつあります。そういう意味でも、互換性が維持される部分を用いた方法を取る方が、将来を見越した作りになると思われます。少なくとも、私だったらそのように作ります。

投稿2020/08/29 04:49

編集2020/09/02 14:46
raccy

総合スコア21739

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

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

phpman

2020/08/29 13:01

有益な情報ありがとうございます!
phpman

2020/09/03 14:43

有益かつ生産的なご意見ありがとうございます!
guest

0

MySQLのバージョン違いがシステム内に二つあるのはいいとしても、
MySQLサーバーが二つあるなら、接続情報も二つ。
select version() を発行するんだとしても、接続情報どちらかしかそれを実行できない。

select version() で分岐するより前の接続情報で分岐できる。

バージョンで分岐するというのが愚策だと言われる理由。

投稿2020/08/30 07:49

phper.k

総合スコア3923

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

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

phpman

2020/09/02 09:23

phper.k:https://teratail.com/users/phper.k#reply > MySQLのバージョン違いがシステム内に二つあるのはいいとしても、 > MySQLサーバーが二つあるなら、接続情報も二つ。 > select version() を発行するんだとしても、接続情報どちらかしかそれを実行できない。 > select version() で分岐するより前の接続情報で分岐できる。 誰もシステム内に二つMySQLサーバーがあるなんて書いてないですよ? 勝手な妄想です。 > バージョンで分岐するというのが愚策だと言われる理由。 間抜けな回答を自信満々に語っちゃって、ちょっと笑っちゃいますね。 PHPとMySQLの質問って間抜けホイホイなんですか?
phper.k

2020/09/02 09:26

それは失礼しました
phpman

2020/09/02 09:38

いえ、こちらこそわざわざ回答をして頂けてありがとうございます。
phper.k

2020/09/02 09:39

いいえ、こちらこそ、わざわざコメントありがとうございます
phpman

2020/09/02 09:42

高評価押しておきますね。
phper.k

2020/09/02 09:57 編集

そんなポイントいらないです そんなことより、ちゃんと要件が伝わる質問文に編集してください
phpman

2020/09/02 10:28

高評価は取り消しました。 要件は十分に記載されています。勝手な妄想をして愚策だと決めつけるのは止めて下さい。
phpman

2020/09/02 10:30

この回答に高評価を押してるやつも間抜けだからな。勝手な妄想は慎むように。
phper.k

2020/09/02 10:30

適当な質問文で要件は満たすというあなたの思い込みこそ、妄想だと思いますよ。
phpman

2020/09/02 10:33

ベストアンサーをご覧ください。
maisumakun

2020/09/02 11:34

> 要件は十分に記載されています。 あれだけのやり取りの上でなお、そういうことを言える方なんですね。そういう確固とした信念を持って生きていきたいものです。
phper.k

2020/09/02 11:35

@maisumakun 「そういう確固とした信念」生活する上では大いに邪魔になりそうですw
phpman

2020/09/04 12:37

phper.k:https://teratail.com/users/phper.k#reply PHPって噂よりもマヌケホイホイだとわかりました。あなたはもう妄想を書き殴って恥をかいてるんですから、他の方々のようの遁走された方が良いですよ。
maisumakun

2020/09/04 12:56

> あなた恥ずかしいですよ? 同じ質問・回答・コメントを見ても、そこから感じ取れるものに大いに違いがあることは、充分に理解させていただきました。
phper.k

2020/09/05 07:16 編集

流石にselect version() みたいな基礎中の基礎知らないとは思わないから、何か複雑な理由でもあるんだろうか?って推測してるんだけどね。
phpman

2020/09/06 12:00

phper.k:https://teratail.com/users/phper.k#reply > 流石にselect version() みたいな基礎中の基礎知らないとは思わないから、何か複雑な理由でもあるんだろうか?って推測してるんだけどね。 `select version()`が基礎中の基礎とは知りませんでした。 具体的に、どのような資料で`select version()`が基礎中の基礎であると説明されているのでしょうか? 参考資料をお示し下さい。妄想ではなく事実の提示をお願いします。
guest

0

SQLとしては

SQL

1select version();

を実行します。
このSELECT文をPHPに組み込みます。

投稿2020/08/26 07:32

Orlofsky

総合スコア16417

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

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

phpman

2020/08/26 07:46

ありがとうございます。取得できました。 ベストアンサーは、同じ内容だったのですが、時間差で少し早く回答して頂けた方にしました。
guest

0

ベストアンサー

SQL

1select version();

を発行して結果を表示する

投稿2020/08/26 07:30

yambejp

総合スコア116724

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

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

phpman

2020/08/26 07:45

ありがとうございます。取得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問