1

このログインスクリプトをmySqlからPDOに変換しようとしていますが、SELECTステートメントはuser_nameに対しては正常に機能しますが、passwordに対しては機能しません。

表示されるエラーメッセージは"SQLSTATE[HY093]: Invalid parameter number: parameter was not defined「。このステートメントに対して$hashedPasswordを別の方法でバインドする必要がありますか?

<?php
session_start(); 
//Include database connection details & salt
$password = $_POST['password'];  
$hashedPassword = sha1($salt . $password); 

try {  
   $stmt_user = $conn->prepare("SELECT * FROM customer_info WHERE user_name = :user_name and password = :hashedPassword");      

   $stmt_user->bindValue(':user_name', $_POST['user_name'], PDO::PARAM_STR); 
   $stmt_user->bindValue(':password', $hashedPassword);     
   $stmt_user->execute();                 
   session_regenerate_id();                       
   $member = $stmt_user->fetch();
   $_SESSION['SESS_USER_ID'] = $member['user_id'];                    
   session_write_close();
   header("location: launch_member_account.php");
   exit();
}catch(PDOException $e) {
 echo $e->getMessage();
}    
?>        
4

1 に答える 1

1

ステートメントは、と呼ばれるパラメーターを定義します:hashedPasswordが、bindValue()呼び出しは。と呼ばれる不明なパラメーターを使用します:password

$stmt_user = $conn->prepare("SELECT * FROM customer_info WHERE user_name = :user_name and password = :hashedPassword");      
//---------------------------------------------------------------------------------------------------^^^^^^^^^^^^^^^^^
// Change this to match the statement.
$stmt_user->bindValue(':hashedPassword', $hashedPassword);

パラメータが一致している限り、パラメータの名前は関係ありません。アプリケーション全体で一貫性を保つようにするのが最善です。

于 2013-01-01T16:37:10.010 に答える