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

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

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

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

Q&A

解決済

1回答

2767閲覧

PDOを使用したPHPでのデータベース接続で、同じクエリを複数ページで使いまわしたい

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

0グッド

0クリップ

投稿2020/06/25 04:32

前提・実現したいこと

PHPフレームワークを使わない環境で、WEBシステムを開発しています。

その中で、例えば「データベースからユーザー一覧を取得する」といった処理を、複数のページで使いまわすために関数化したいと思っています。

実装は出来たのですが、

  • このような実装方法は推奨されるのか
  • セキュリティ・パフォーマンス面で懸念点はないか
  • そもそも根本的な設計が誤っていないか

などをアドバイスいただければと思っています。

実装の概要は以下の通りです。

  • データベース接続用の関数 db_connect() で、PDOインスタンスを取得(de_connect.php
  • ユーザー一覧を取得する関数 get_user() を作成(api.php
  • ユーザー一覧を取得したいページで、de_connect.phpspi.php をrequireする
  • get_user() 関数にPDOインスタンスを投げて、結果を取得

db_connect.php

php

1<?php 2define( 'DB_HOST', 'localhost' ); 3define( 'DB_NAME', 'mst_user' ); 4define( 'DB_USERNAME', 'root' ); 5define( 'DB_PASSWORD', 'password' ); 6define( 'DSN', 'mysql:host=' . DB_HOST . '; dbname=' . DB_NAME . '; charset=utf8' ); 7 8// データベースに接続 9function db_connect() { 10 $pdo = new PDO( DSN, DB_USERNAME, DB_PASSWORD ); 11 return $pdo; 12}

api.php

php

1<?php 2// ユーザー一覧を取得 3function get_user( $pdo ) { 4 $rows = $pdo->query( 'SELECT * FROM mst_user' )->fetchAll(); 5 return $rows; 6} 7 8// XXX一覧を取得 9function get_xxx( $pdo ) { 10 $rows = $pdo->query( 'SELECT * FROM mst_xxx' )->fetchAll(); 11 return $rows; 12} 13 14// YYY一覧を取得 15function get_yyy( $pdo ) { 16 $rows = $pdo->query( 'SELECT * FROM mst_yyy' )->fetchAll(); 17 return $rows; 18}

page.php

php

1<?php 2require_once( 'db_connect.php' ); 3require_once( 'api.php' ); 4 5// データベースに接続 6$dbh = db_connect(); 7 8// ユーザー一覧を取得 9$user = get_user( $dbh );

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

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

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

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

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

guest

回答1

0

ベストアンサー

関数の使い回しをしたり接続インスタンスの手順を1本化するのであれば
まずはクラスで組むのが肝要です

投稿2020/06/25 04:59

yambejp

総合スコア114843

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

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

退会済みユーザー

退会済みユーザー

2020/06/25 05:09

ご回答ありがとうございます。 クラス化するとのアドバイスをもとに調べてみた所、非常に参考になるページが見つかりました。 ・コネクションクラスでPDOのconnection(データベースの接続)を共通化する https://www.irohabook.com/pdo-connection DB接続用クラスを拡張したクエリー用クラスを各種用意して、その中で必要な情報を取得する関数を定義していく方針のようです。 一度こちらのやり方で実装を試みてみたいと思います。 (ここまでやるのであれば、フレームワークを導入した方が良い気もしてきましたが。。)
退会済みユーザー

退会済みユーザー

2020/06/25 05:38

MVCモデルを学んでクエリーを分離させていくのも一興。
退会済みユーザー

退会済みユーザー

2020/06/25 08:15

ご回答ありがとうございます。 フレームワーク含め、MVCでの実装経験が乏しいため、今後はしっかり勉強していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問