https://teratail.com/users/m.ts10806
↑こちらの方が、MySQL5.6と8.0の両方で動くSQL文が書けるとおっしゃっていますが、どのようにすれば動くのか回答を求めたところ、逃亡されました。
PHPとMySQLの回答者には、最初から相手を見下して、居丈高な回答をしてくる人がいます。
回答する人は、彼を戒めとして下さい。
PHPで、MySQLサーバーのバージョンに応じて、クエリーの組み立てを変えたいと思っていますが、PHPからMySQLサーバーのバージョンを確認する方法はありますでしょうか?
例えば、アプリケーション・サーバーとデータベース・サーバーが別れていた場合でも確認できる方法を探しています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/26 20:58
2020/08/28 08:43
2020/08/28 08:44
2020/08/28 08:48
2020/08/28 08:52
2020/08/28 09:11
2020/08/28 11:29
2020/08/28 11:31
2020/08/28 11:33
回答5件
0
滅茶苦茶悪手だと思います。
それなら「どちらでも通るSQL」で組むか、DBの種類やバージョンを意識せずに済む仕組み(フレームワークなど)を利用するべきです。
投稿2020/08/26 07:33
総合スコア80875
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/26 07:51
2020/08/26 07:56
2020/08/26 07:56
2020/08/28 08:49
2020/08/28 08:50
2020/08/28 09:16 編集
2020/08/28 09:10
2020/08/28 11:19
2020/08/28 11:27 編集
2020/08/28 11:28 編集
2020/08/28 11:23
2020/08/28 11:26
2020/08/28 21:11 編集
退会済みユーザー
2020/08/28 21:07
2020/08/28 21:12
退会済みユーザー
2020/08/28 21:23
2020/08/29 00:07 編集
2020/08/29 13:03
2020/08/29 13:03
2020/08/29 13:04
退会済みユーザー
2020/08/29 22:20
2020/08/29 22:51
2020/08/30 00:39 編集
2020/08/30 07:00
2020/08/30 07:04
2020/08/30 08:05
2020/08/30 09:36
2020/08/30 09:37
2020/08/30 09:53 編集
2020/08/30 23:40 編集
退会済みユーザー
2020/08/31 00:01
2020/08/31 00:11
退会済みユーザー
2020/08/31 01:15
2020/08/31 01:23 編集
2020/09/02 09:27
2020/09/02 09:34
2020/09/02 09:36
2020/09/02 10:07
2020/09/02 10:26
2020/09/02 10:36 編集
2020/09/02 10:36
2020/09/02 10:38 編集
退会済みユーザー
2020/09/02 10:45
2020/09/02 10:48
2020/09/02 10:51
退会済みユーザー
2020/09/02 10:53
2020/09/02 10:59
退会済みユーザー
2020/09/02 11:00
2020/09/02 11:02
2020/09/02 11:08 編集
退会済みユーザー
2020/09/02 11:13
2020/09/02 11:16
退会済みユーザー
2020/09/02 11:22
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総合スコア21739
0
MySQLのバージョン違いがシステム内に二つあるのはいいとしても、
MySQLサーバーが二つあるなら、接続情報も二つ。
select version() を発行するんだとしても、接続情報どちらかしかそれを実行できない。
select version() で分岐するより前の接続情報で分岐できる。
バージョンで分岐するというのが愚策だと言われる理由。
投稿2020/08/30 07:49
総合スコア3923
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/02 09:23
2020/09/02 09:26
2020/09/02 09:38
2020/09/02 09:39
2020/09/02 09:42
2020/09/02 09:57 編集
2020/09/02 10:28
2020/09/02 10:30
2020/09/02 10:30
2020/09/02 10:33
2020/09/02 10:41
2020/09/02 11:34
2020/09/02 11:35
2020/09/04 12:34
2020/09/04 12:37
2020/09/04 12:56
2020/09/05 07:16 編集
2020/09/06 12:00
2020/09/12 12:29
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。