• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PDOで複数のテーブルを扱いたい)

PDOで複数のテーブルを扱いたい

noname#244856の回答

noname#244856
noname#244856
回答No.2

> カラム名が同じになっていれば紐づけできているということでいいのでしょうか? カラム名自体は違っても構いません。 要は異なるテーブルをリンクするために、全く同じ値を構成するカラムがあればいいだけです。 下記のように2つのテーブルを内部結合させることも出来ます。 SELECT  t1.name AS name,  t2.address AS address FROM  t1 INNER JOIN t2 ON t1.id = t2.id > 今ログインのためにセットされている記述を変更するべきなのでしょうか? 最初に会員に関する情報を全部取ってきてセッションに保存し、データベースでそれらに変更があった場合はセッション側も更新する、という方法でもいいのですが、データベースの「データを1か所に集約する」という理念には反している気がするんですよね。その点では「不変の識別値(ID:Identifier)」という最低限のものだけをセッションに入れるようにした方が分かりやすいし、設計としても好ましいと思います。 よってログインページでは $_SESSION['user_id'] にユーザー固有のIDを保存します。他にユーザーに関する情報のセットは一切行いません。各ページで次の処理を行ってください。 1. if (!isset($_SESSION['user_id'])) { ____header('Location: ログインページURL'); ____exit; } として未ログイン状態であればログインページに飛ばす。 2. ログイン中であることが1のチェックで保証されれば、WHERE句と$_SESSION['user_id']を使って、usersテーブルやbankテーブルから必要なものだけ残りの情報を取り出す。これはセッションに保存したりせずに毎回データベースに接続して行うべき。

milkkokoa94856
質問者

補足

丁寧なご回答ありがとうございます。 セッションにはIDのみ保存しログインができました。 そしてセッションを使い呼び出そうとしてみたのですが、またここがうまくいきません。 $me = $_SESSION['user_id']; $dbh = connectDb(); $sql = "select * from sbank where id = :$me limit 1"; $stmt = $dbh->prepare($sql); $stmt->execute(array(":$me" => (int)$_GET['id'])); $id = $stmt->fetch(); 記述の方が間違っているのでしょうか? 何度も申し訳ございませんがよろしくお願いいたします。

関連するQ&A

  • テーブルデータをSESSIONに保存し、使いまわす

    お世話になります。 現在、ユーザーが記事を作成、編集、削除できるブログシステムを作成しています。 MYSQLのデータベーステーブルには以下の3つを用意しています。 ・usersテーブル:ユーザー名(name)、パスワード等(pw)、記事保存先ディレクトリ(dir)等のユーザ情報 ・articleテーブル:ブログ記事タイトルや本文等の情報 ・imagesテーブル:ブログ記事に使用している画像情報 ここで質問があります。 現在ユーザーがログイン成功時にセッションにはユーザーIDのみを $_SESSION["id"]として保存しています。 そして、記事投稿処理時や、記事編集処理時など、各場面で必要になった情報はそのときselectを使ってテーブルから毎回取り出しています。 しかし、こんなことをしなくても、ユーザーがログイン成功時に、セッションにユーザーID以外の情報も 保存しておけば、以後データベースから取り出す必要がなくなり便利かと思うのですが、セキュリティ面などからこのようなやり方はNGなのでしょうか? 1,まったく問題ないのか? 2,パスワード等の重要データはNGなのか? 3,ユーザーidのみにしておくべきなのか? 問題がある場合、その理由も教えていただけるとありがたいです。 例)ユーザーログイン時に、 $_SESSION["id"]=ユーザーID格納。 $_SESSION["name"]=ユーザー名を格納。 $_SESSION["dir"]=記事保存先ディレクトリを格納。 $_SESSION["article"]=ログインユーザーの記事情報を格納。 お分かりの方、教えていただけたら幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 会員関連テーブルの構成について

    MySQLとPHPでデータベースを勉強している初心者です。会員関連のテーブルについて下記のような構成を考えています。 Table A (会員ログイン用) - id  - ユーザー名 - パスワード Table B (会員プロファイル) - id - item 1 - item 2 - item 3   ・   ・ - 登録日 - 退会日 idを主キーにしてTable AとTable Bを関連付けするつもりですが、何らかの原因で使っている途中でidの関連付けがうまくいかなくなることなどあるのでしょうか? そのような場合、idにずれが生じても見つけられないのではなどと考えてしまいます。Table Bにidとユーザー名を載せたり、いっそ一つのテーブルで管理するほうが確実でしょうか。通常はどのようにしていますか?  Table Bは現会員と退会者を一つのテーブルで管理し、現会員のプロファイルの一部を公開します。退会者のプロファイルは使わないのですが、新規登録者とユーザー名がかぶらないようになど保管の必要も感じます。退会者の情報の取り扱いについてもアドバイスいただければと思います。

    • ベストアンサー
    • MySQL
  • PHPデータベース・テーブルの移行

    PHPとMySQLを使ってサイト構築しています。 MySQLのデータベース「group_color」にはテーブル「pink」とテーブル「blue」があります。 サイトでログインしている会員ユーザーの情報が「pink」に入っていてユーザーが ”ブルーグループに変更する”というボタンを押すと、テーブルpinkに入っている情報がテーブルblueに移行するようにしたいのですが、PHPの表記はどのようになりますか? 「ログインしている会員の情報」を移行させたいです。 テーブルのフィールドは ・id ・name ・birthday となっています。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • セッションについて

    codeigniterで作成を試みているのですが、セッションについてよくわかりません。 DBを用いてセッションを管理しようとしています。 たとえば、会員テーブルを id(auto_increment)で順に登録が増えるとします。 同一セッションで会員のレコードを増えるのを避けたいと考えてセッションテーブルと会員テーブルの紐付けを行うのが必要と考えました。 このとき、セッションテーブルにidを登録するのがいいのでしょうか? それとも会員テーブルにセッションIDを登録するのがいいのでしょうか? 一般的にはどのような設計をするのでしょうか? 初心者ですので、教えてください。

    • ベストアンサー
    • PHP
  • 現在、会員制のサイトを作っています。

    現在、会員制のサイトを作っています。 ユーザーがおすすめの商品を登録して紹介したり、評価・採点ができるシステムで、会員登録やセッションの管理などおおよその部分はできました。 しかし、ユーザー毎にマイページを設けて、そこから過去に自分が付けたコメントを見られるようにしたいのですが、ここのデータベースやテーブルの構成が分かりません。 今の所、ユーザー・商品・コメント毎にテーブルを分けるようにしていますが、上記のことを実現するにはどのように製作したらよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • wordpress 会員情報 変更ページ

    現在wordpressにて会員ページを作成しています。 ログインページを作成し、ユーザーにログインをさせてTOPページが表示するというごく普通の会員ページです。 質問ですが、このサイト上でユーザーが自分のパスワードだったり、情報を編集ができるページを作成したいのですが、どのように作ったらよろしいのかわかりません。 管理画面で情報変更はできるのですが、ユーザーには一切管理画面は見せない仕様にしています。 管理画面のプロフィール編集用のファイル(user-edit.php)を使用すればできそうなイメージはあるのですが、どのように作っていいのかわからず困っています。 お分かりの方いらっしゃいましたらよろしくお願いします。

    • 締切済み
    • PHP
  • mysqlのデータベース設計(1テーブルで管理)

    お世話になります。 現在、会員がログインしてブログ管理できる(記事を作成・編集できるシステム)を考えています。 そこでデータベース設計について質問があります。 一般的には、 ・ユーザー情報に関するテーブル ・ブログ記事に関するテーブル この2つを以下のような感じで設計すると思うのですが↓ ■usersテーブル ・id ・ユーザー名 ・パスワード ■articleテーブル ・id ・user_id(記事投稿者のid) ・contents(ブログタイトル、ブログ本文) ・created ・modified 私は、この2つを1つのテーブルですべてまとめて管理することを考えているのですが、 何かデメリットはあるのでしょうか?↓ ■usersテーブル(このテーブル1つですべてまとめて管理) ・id ・ユーザー名 ・パスワード ・contents(ブログタイトル|ブログ本文|記事投稿日|記事編集日) ・created ・modified ちなみにブログ記事は、区切り文字で分けながらcontentsにどんどん詰め込んでいき(updateする)、 取り出すときは区切り文字をexplodeしていく形を考えています。 実際にはもっと項目が多くなるのですが、1ユーザーの情報をすべて1つのテーブルで管理することで個人的に非常にわかりやすい、さらに単純なのでこちらのほうが速度も速いのではないかと思っているのですが、良くないのでしょうか?(あまり見かけないので) どなたか教えていただけると幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • レンタルサーバー&PHP&MySQLの環境で会員限定のデータベースを作

    レンタルサーバー&PHP&MySQLの環境で会員限定のデータベースを作成中です。 ログイン・ログアウトの処理を作成しているのですけど、いくつか質問させてください。 色々なサイトを巡り自分が解釈したログインの方法を書きます。 1.「会員登録画面」から会員情報を登録。(会員情報をMySQLに保存) 2.「ログイン画面」からフォーム(ID・PASS)を入力しボタンを押して認証。 3.入力されたデータを元にMySQLに問い合わせ会員情報の有無・情報の一致を判断 (情報がない場合はログイン画面へ) 4.セッションにID・PASSを保存。クッキーにセッションIDを保存。 5.会員限定ページに移動。セッションに保存してあるID・PASSを元にMySQLに問い合わせ一致するかどうかを判断。(していなければログイン画面へ) 6.セッションIDを更新する。以後ページを移動する度に一致しているかどうかを確認する。 このような感じになります。 ログアウトはセッション・クッキーを削除すればいいかなと思っています。 上記のような流れでいいのでしょうか。 いまいちセッションやクッキーに保存する内容をどうすればいいのか分かってない状態です。 又セキュリティ的にはどうでしょうか。データベースの改ざんや破壊されたら困るのである程度対策されたものを作成したいです。 ログイン時に自動ログインの有無のチェックボックスを設置してチェックされていたら2週間程度自動でログインされるようにもしてみたいです。 チェックされていたら自動ログインのkeyをランダム値で作成しクッキーとMySQLの会員情報に保存する。 ログインする度にkeyを更新する。(ページに移動する時も) ログアウトしたらkeyを削除する。 http://blog.ohgaki.net/espcs_if_a_fa_ia_a_pa_e_oa_a_sa_da_ca_sa ↑ここのサイトを見ました。 MySQLの会員管理なのですけど、MySQL専用のユーザー登録?(権限とか)を会員毎に登録していく方がいいのでしょうか。 PHPやMySQLは最近勉強し始めたので解り易く教えて頂ければ嬉しいです。 ソースなども添えて頂けるとありがたいです。 良い回答お待ちしています。

    • 締切済み
    • PHP
  • 一つのフィールドに複数の情報を持たせたいです。

    データベースに詳しい方!一つのフィールドに複数の情報を持たせたいです。 例えば複数のユーザを管理するテーブルにあるID(フィールド)を 複数個をデータベースに保存する場合どうすればいいのでしょうか? 言語はJavaで、データベースはMySQLを使っています。 ↓↓各フィールド(例) -------------------------- || userName || userID || ○○ID || -------------------------- 上記の 「○○ID」というフィールド に複数の値を持たせたいのです。 String型の配列、もしくはXMLをMySQLの一つのフィールドに保存する 事はできるのでしょうか? (もし出来るのならこちらを採用したいです) それとも○○IDに関連するテーブルを作成する(?) それか最悪の場合、ユーザが増えるたびにテーブルを一つ作成 して管理するか・・・・(避けたいです) 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • ブログ、SNSなどのデータベースのテーブル

    ブログやSNSなどのサービスが流行っていますが、これらのサイトでは データベースでユーザーの情報(日記記事やコメント、基本情報など)を管理していると思います。 データベースでは、ユーザー1人ずつに対して複数のテーブルがあるのでしょうか?