このコードは、ある講座で使用したログイン時のユーザデータ取得のコードです。
なお下2つのコードは、呼び出しと、SQL実行の関数は別ファイルにあり、SQL実行の関数は2つとも同一ファイルにあります。
ですが、ファイルは呼び出せています。
php
1try { 2 $userModel = new \MyApp\Model\User(); 3 $user = $userModel->login([ 4 'email' => $_POST['email'], 5 'password' => $_POST['password'] 6 ]); 7} catch (\MyApp\Exception\UnmatchEmailOrPassword $e) { 8 $this->setErrors('login', $e->getMessage()); 9 return; 10} 11 12// ログイン 13 // 渡されたデータでSQLを組み立てる 14 public function login($values) { 15 // ユーザーの取得 16 $stmt = $this->db->prepare("select * from users where email = :email"); 17 $stmt->execute([ 18 ':email' => $values['email'] 19 ]); 20 // データはオブジェクトモードで取得 21 $stmt->setFetchMode(\PDO::FETCH_CLASS, 'stdClass'); 22 $user = $stmt->fetch(); 23 24 // ユーザーが存在しない場合 25 if (empty($user)) { 26 throw new \MyApp\Exception\UnmatchEmailOrPassword(); 27 } 28 // パスワードがマッチしなかった場合 29 if (!password_verify($values['password'], $user->password)) { 30 throw new \MyApp\Exception\UnmatchEmailOrPassword(); 31 } 32 return $user; 33 }
このコードは、呼び出し元から引数で値を渡し、その結果をうまく返しているんですが、これを少しいじって自分で作ってみると上手く動かすエラーが出ます。
php
1$Get_Id = substr($_SERVER['QUERY_STRING'], 3); 2 3// IDでユーザの情報を探す 4try { 5 $userModel = new \MyApp\Model\User(); 6 $user = $userModel->findUser([ 7 'number' => $Get_Id 8 ]); 9 10} catch (\MyApp\Exception\UnmatchUserData $e) { 11 $this->setErrors('Get_User', $e->getMessage()); 12 return; 13} 14 15 16// 引数で指定されたユーザのデータを返す 17 public function findUser($values) { 18 $stmt = this->db->prepare("select * from users where anumber = :number"); 19 $stmt->execute([ 20 ':number' => $values['number'] 21 ]); 22 $stmt->setFetchMode(\PDO::FETCH_CLASS, 'stdClass'); 23 return $stmt->findUser(); 24 } 25 26
下のエラーが出ます。
text
1Fatal error: Uncaught Error: Call to undefined method PDOStatement::findUser() in /Users/hasegawaryou/Dropbox/alpha/lib/Model/User.php:89 Stack trace: #0 /Users/hasegawaryou/Dropbox/alpha/public/Admin/User_Data/index.php(59): MyApp\Model\User->findUser(Array) #1 {main} thrown in /Users/hasegawaryou/Dropbox/alpha/lib/Model/User.php on line 89
###追記です。現状報告
php
1try { 2 $userModel = new \MyApp\Model\User(); 3 $user = $userModel->findUser([ 4 'number' => $Get_Id 5 ]); 6 7} catch (\MyApp\Exception\UnmatchUserData $e) { 8 $this->setErrors('Get_User', $e->getMessage()); 9 return; 10} 11 12 13 // 引数で指定されたユーザのデータを返す 14 public function findUser($values) { 15 $stmt = $this->db->prepare("select * from users where anumber = ?"); 16 $stmt->execute([$values['number']]); 17 $row=$stmt->fetch(PDO::FETCH_ASSOC); 18 return $row; 19 }
text
1Fatal error: Uncaught Error: Class 'MyApp\Model\PDO' not found in /Users/hasegawaryou/Dropbox/alpha/lib/Model/User.php:86 Stack trace: #0 /Users/hasegawaryou/Dropbox/alpha/public/Admin/User_Data/index.php(59): MyApp\Model\User->findUser(Array) #1 {main} thrown in /Users/hasegawaryou/Dropbox/alpha/lib/Model/User.php on line 86
yambejp さんの返答を元に書き直したコードです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/01 12:49 編集
2017/06/01 12:52
2017/06/01 12:56
2017/06/01 12:58
2017/06/01 13:17
2017/06/01 13:26
2017/06/01 13:44
2017/06/01 13:50
2017/06/01 13:58 編集
2017/06/01 14:00
2017/06/01 14:02
2017/06/01 14:19
2017/06/02 00:32
2017/06/02 04:02