ログインをしたいです。
前提:
mailとpasswordは前の画面からpostされてきます。
問題のあるコードは以下になります。
PHP
1<!DOCTYPE html> 2<head> 3 <meta charset="UTF8"> 4 <title>Training</title> 5</head> 6<body> 7 <?php 8 require_once('common.php'); 9 $post=sanitize($_POST); 10 $mail = $post['mail']; 11 $pass = $post['password']; 12 $dsn='mysql:dbname=muscle;host=localhost;charset=utf8'; 13 $user='root'; 14 $password=''; 15 $dbh=new PDO($dsn, $user, $password); 16 $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 17 18 $sql='SELECT * FROM user_data WHERE mail= :mail AND password= :password limit 1'; 19 20 $stmt=$dbh->prepare($sql); 21 22 $stmt->execute(array(':mail' => $mail)); 23 $stmt->execute(array(':password' => md5($pass))); 24 $rec = $stmt->fetch(PDO::FETCH_ASSOC); 25 26 if($rec > 0){ 27 $code = $rec['code']; 28 session_start(); 29 $_SESSION['user_login']=1; 30 $_SESSION['user_code']=$code; 31 $_SESSION['user_name']=$name; 32 header("Location: member_training_data.php"); 33 } 34 else{ 35 print'メールアドレスもしくはパスワードが間違っています。'; 36 print'<input onclick="history.back()" value="戻る>'; 37 print'<a href="member_registration.html">初めての方はこちら</a>'; 38 } 39 ;?> 40</body> 41</html>
エラーは、この通り。
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\php_study_site\login_check.php:22 Stack trace: #0 C:\xampp\htdocs\php_study_site\login_check.php(22): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\php_study_site\login_check.php on line 22
22行目は以下です。
PHP
1 $stmt->execute(array(':mail' => $mail));
尚、common.php の内容は、
PHP
1 function sanitize($before){ 2 foreach($before as $key => $value){ 3 $after[$key]=htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); 4 } 5 return $after; 6 }
です。ここは関係ないかと思います。
回答1件
あなたの回答
tips
プレビュー