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

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

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

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

PHP

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

Q&A

解決済

2回答

1809閲覧

クエリの再利用について

sumomomomomo

総合スコア12

MySQL

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

PHP

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

0グッド

0クリップ

投稿2017/02/13 13:00

###前提・実現したいこと
PHP5.6とMYSQLで、あるテーブルの全レコード数を取得し、取得した全レコード数を同じページのいろいろな関数で何度か再利用がしたいです。

下記思いついた解決策です。

######全レコード数をグローバル変数に格納しておく
→グローバル変数の使い方が間違っているのか、下記で$max_recordに値が入っていないようでした。そもそもPHPでグローバル変数って非推奨なんでしょうか、あえて使いづらく作ってありそうな感じがします。

<?php $max_record; function A(){ $GLOBALS["max_record"] = $row["COUNT(*)"]; } ?> <?php function B(){ echo $GLOBALS["max_record"]; } ?>

#####全レコード数を使う都度、全レコード数取得のクエリを実行して引数で全レコード数を受け渡しする。
→期待通りの動作はしましたが、とてつもなく非効率な気がします。

全レコード数が3なら3という数字をいろいろな関数から使えるだけでいいのですが、上記2つの方法しか思いつきません。

何かいい解決策がありましたらご教授くださいませ。

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。

グローバル変数は非推奨ではないですが、影響範囲が大きく
思わぬ障害を引き起こす原因となりやすいです。
(WEBで検索すると色々と話に上がっていますよね)

私からは下記のようにclassを使用した
記述方法をご紹介します。

PHP

1 2<?php 3 4class Sample 5{ 6 private $max_record = 0; 7 8 public function A() { 9 // Sample のプライベート変数に値を格納 10 $this->max_record = 1; 11 } 12 13 public function B() { 14 // Sample のプライベート変数を表示 15 echo $this->max_record; 16 } 17 18 public function C() { 19 return $this->max_record; 20 } 21} 22 23$sample = new Sample(); 24$sample->A(); 25$sample->B(); // 1 26echo $sample->C(); // 取り出す時はこんな感じです。 27 28?>

こちらの書き方であれば、$max_record は Sample クラス内に留まりますし、
DB アクセス系の関数を一まとまりの class として書いておくことで
分かりやすくなるのではないでしょうか。

投稿2017/02/13 13:53

編集2017/02/13 14:02
_yu_

総合スコア91

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

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

sumomomomomo

2017/02/13 14:38

できました! classってこんな便利だったんですね。 見た目もすごくわかりやすくなりました。 ありがとうございます!
guest

0

わざわざ新しい処理作らなくても、PDO 使ってれば普通に取り出せる気がします。
すでに解決してるみたいですが、参考まで。

投稿2017/02/13 14:47

編集2017/02/19 00:26
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sumomomomomo

2017/02/13 15:02

ありがとうございます。 まだmysqliしか使ったことがないのですが、PDOのほうが便利そうですね・・ 最初の選択を間違えてしまったかもしれないです
退会済みユーザー

退会済みユーザー

2017/02/14 09:05

ん?なんのマイナスだろ?
退会済みユーザー

退会済みユーザー

2017/02/18 19:06

元の質問に答えてないって評価ですかね? 追記しました。
退会済みユーザー

退会済みユーザー

2017/02/19 00:27

追記後も低評価が入ったので、混乱回避のため追記部分は削除しました^^; PDO はいろいろ便利なので、うまく使って下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問