お疲れ様です。
PHPのPDOオブジェクトを用いた、データベース操作を行っているのですが、値が取得できず、falseになってしまいます。
操作の流れは以下です。
①sselectしたいカラム名をセットした、配列を投げる
②メソッドが、ステートメントを作成する
③PDOのエクセキュートに配列をわたしてレコードを取得する
php
1 //分かりにくいですが、受け取る値は「"キー" => "値"」の連想配列で、 2 // foreach内では、"キー"のみ使用しています。 3 public function makeSelectQuery($array) 4 { 5 $sql = 'select * from members where '; 6 $where_string = ''; 7 8 9 foreach($array as $column => $value){ 10 11 $where_string .= $column . ' = :' . $column; 12 13 if($value !== end($array)){ 14 $where_string .= ' and '; 15 } 16 } 17 18 return $sql = $sql . $where_string; 19 }
log
1// こんな感じになります。 2string(81) "select * from members where password = :password and mail_address = :mail_address" string(1) " "
php
1 /** 2 * メールアドレスとパスワードからメンバーを取得. 3 * 4 */ 5 public function getOneByColumns($array) 6 { 7 try { 8 $sql = $this->makeSelectQuery($array); //←この部分で上記のメソッドを使用し、クエリを作成 9 $statement = $this->db->prepare($sql); 10 $statement->execute($this->makeExecuteArray($array)); 11 $result = $statement->fetchAll(PDO::FETCH_ASSOC); 12 return $result; 13 } catch (PDOException $exception) { 14 return false; 15 } 16 } 17 18 // ["カラム名" => "値"]という形の連想配列を受け取り、 19 // [":カラム名" => "値"]という形の連想配列を作成し、 20 // パラメータと一致するようにしています。 21 public function makeExecuteArray($array) 22 { 23 $return = []; 24 25 foreach($array as $column => $value){ 26 $return[':' . $column] = $value; 27 } 28 29 return $return; 30 }
ソースが落ちたりはしなのですが、レコードを取得できません。
何が問題なのでしょうか。。。。。。
sqlのエラーログにも何も吐かれていません。
★追記★
オブジェクトが生成されていないということはないような気がします。
今朝までは以下のような形で実行し、問題なく値が取得できていたのですが、
拡張性がないので、改良しました。
php
1 $sql = 'SELECT * FROM members WHERE mail_address = ? AND password = ?'; 2 $stmt = $this->db->prepare($sql); 3 $stmt->bindValue(1, $mail_address, PDO::PARAM_STR); 4 $stmt->bindValue(2, $password, PDO::PARAM_STR); 5 $stmt->execute(); 6 $res = $stmt ->fetchAll(PDO::FETCH_ASSOC);
回答1件
あなたの回答
tips
プレビュー