バインドされたパラメータ

前提

login処理を行うプログラムを実装中に次にエラーが出ていて、以前出た際の解決方法で解決できず悩んでいます。
既にデータベースへは入力しているデータを登録してあります。

実現したいこと

既にデータベースに登録されているnicknameとpasswordのセットを見つけあったら、そのアカウントでログインという処理を行いたいです。

発生している問題・エラーメッセージ

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in --------- Stack trace: #0 --------: PDOStatement->execute() #1 {main} thrown in ------------------- on line 12

該当のソースコード

php

<?php$err_msg="";if(isset($_POST['login'])){ $nickname = $_POST['nickname']; $password = $_POST['password']; try { $db = new PDO('-----------------------------------------'); $sql = 'SELECT nickname, password FROM Info where nickname = :nickname AND password = :password'; $stmt = $db->prepare($sql); $stmt->bindValue(':nickname', $nickname, PDO::PARAM_STR); $stmt->bindValue(':password', $password, PDO::PARAM_STR); $stmt->execute(); $result = $stmt->fetch(); $stmt = null; $db = null; if(!empty($result)){ header('Location:--------------------------------------'); exit(); }else{ $err_msg = "アカウント情報が間違っています。";} }catch (PDOExeption $e) { echo "値が入力されていません。\n"; echo $e->getMessage(); exit(); }}?><!DOCTYPE html><html lang="ja"><body> <h1>ログイン</h1> <form action="" method="POST"> ID:<input type="text" name="nickname"><br> Password:<input type="password" name="password"><br> 自動ログイン:<input type="checkbox" name="auto" value="fales"><br> <input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($_SESSION['csrf_token'], ENT_QUOTES, "UTF-8") ?>"> <input type="submit" value="login" name="login"> <input type="reset" value="reset"> <a href=".-----------------------" class="fir-pro">初めてのログイン</a> </form></body></html>

試したこと

初めbindValueを書いていなかったため、書き足しました。以前はbindvalueを書き足すことで改善されました。

補足情報(FW/ツールのバージョンなど)

当該の12行目はexecuteの部分です。
nicknameもpasswordも英数字のみが入力されています。
webpegeに関する部分は-----で隠しています。
htmlとphpを同じファイルに書いています。

コメントを投稿

0 コメント