実現したい事
xamppを使用してログイン機能を作っている所です。
テーブル:company_dataと、テーブル:home_dataに、同一のカラム名のidとpwがそれぞれあります。
①ログイン画面から$_POSTで送られてきたidとpwが、
②テーブルAとテーブルBのどちらかのテーブルのIDとPWと合致する場合のみ、
③$resultをtrueにしてlogin()関数の呼び出し元へ返す、という処理を実装したいです。
困っている事
テーブル:company_dataと、テーブル:home_dataへの効率的なアクセス方法が分かりません。
$pdo->prepare()からfetchAllまで一緒なので使い回しをしてなるべく少ない記述で終わらせたいです。
PHP
1 2<?php 3require_once('../common/config.php'); 4//ログイン処理 5function login($id, $pw){ 6 $pdo = new pdo(DSN,DB_USER,DB_PASS); 7 $stt = $pdo->prepare("SELECT id,pw FROM company_data WHERE id = :id AND pw = :pw"); 8 $stt->bindParam(':id', $id); 9 $stt->bindParam(':pw', $pw); 10 $stt->execute(); 11 $result = $stt->fetchAll(PDO::FETCH_ASSOC); 12 //どちらかのテーブルの中にidとpwがあれば$result=trueになる。 13 if($result){ 14 foreach($result as $r){ 15 $result['id'] = $r['id']; 16 $result['pw'] = $r['pw']; 17 } 18 }else{ 19 $stt = $pdo->prepare("SELECT id,pw FROM home_data WHERE id = :id AND pw = :pw"); 20 $stt->bindParam(':id', $id); 21 $stt->bindParam(':pw', $pw); 22 $stt->execute(); 23 $result = $stt->fetchAll(PDO::FETCH_ASSOC); 24 foreach($result as $r){ 25 $result['id'] = $r['id']; 26 $result['pw'] = $r['pw']; 27 } 28 } 29 if(isset($result)){ 30 return $result; 31 } 32} 33 34 35?> 36
試した事
INNER JOINを使用してテーブルの結合を試みましたが、コードの書き方がおかしく上手くいきませんでした。
PHP
1 $stt = $pdo->prepare("SELECT c.id,c.pw,h.id,h.pw FROM company_data AS c INNER JOIN home_data AS h ON c.id = :c.id AND c.pw = :c.pw OR h.id = :h.id AND h.pw = :h.pw");
ご回答頂けますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー