前提・実現したいこと
PHPでアカウントの「パスワードリセットシステム」を作っています。
な機能を実装中に以下のエラーメッセージが発生しました。
下記コードの31行目、(「//ここがエラー箇所」とコメントアウトしております。)
ここのエラーを消したいと考えておりますが、解決方法がわかりません。
発生している問題・エラーメッセージ
Fatal error: Uncaught Error: Call to undefined function mysqli_stmt_get_result() in ○○:31 Stack trace: #0 {main} thrown in
該当のソースコード
<?php if (isset($_POST["reset-password-submit"])) { $selector = $_POST["selector"]; $validator = $_POST["validator"]; $password = $_POST["pwd"]; $passwordRepeat = $_POST["pwd-repeat"]; if (empty($password) || empty($passwordRepeat)) { echo"パスワード変更期限を超過しております。もう一度やり直してください"; exit(); }else if($password != $passwordRepeat){ echo"パスワードが一致しません。もう一度入力してください"; exit(); } $currentDate = date("U"); require('config.php'); $sql = "SELECT * FROM pwdReset WHERE pwdResetSelector=? AND pwdResetExpires >= ?"; $stmt = mysqli_stmt_init($conn); if (!mysqli_stmt_prepare($stmt, $sql)){ echo "データベースにアクセスできません"; exit(); }else{ mysqli_stmt_bind_param($stmt,'ss',$selector,$currentDate); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt);//ここがエラー箇所 if (!$row = mysqli_fetch_assoc($result)){ echo "パスワード変更の手続きを初めからやり直してください"; exit(); } else { $tokenBin = hex2bin($validator); $tokenCheck = password_verify($tokenBin, $row["pwdResetToken"]); if($tokenCheck === false){ echo "だめやー"; }elseif($tokenCheck === true){ $tokenEmail = $row["pwdResetEmail"]; $sql = "SELECT * FROM member WHERE emailUsers=?"; $stmt = mysqli_stmt_init($conn); if (!mysqli_stmt_prepare($stmt,$sql)){ echo "エラー①"; exit(); }else{ mysqli_stmt_bind_param($stmt,"s",$tokenEmail); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt);//ここもエラーになるはず if (!$row = mysqli_fetch_assoc($result)){ echo "もう一度やってね"; exit(); } else { $sql = "UPDATE member SET pwdUsers=? WHERE emailUsers=?"; $stmt = mysqli_stmt_init($conn); if (!mysqli_stmt_prepare($stmt,$sql)){ echo "エラー①"; exit(); }else{ $newPwdHash = password_hash($password, PASSWORD_DEFAULT); mysqli_stmt_bind_param($stmt,"ss",$newPwdHash,$tokenEmail); mysqli_stmt_execute($stmt); $sql = "DELETE FROM pwdReset WHERE pwdResetEmail=?"; $stmt = mysqli_stmt_init($conn); if (!mysqli_stmt_prepare($stmt,$sql)){ echo "エラー①"; exit(); }else{ mysqli_stmt_bind_param($stmt,"s",$tokenEmail); mysqli_stmt_execute($stmt); } } } } } } } }else{ echo"なぜここでだめなのだ!!"; }
試したこと
mysqli_stmt_bind_result()など、他に使えそうなものに変更しましたが、エラーが増えました。
補足情報(FW/ツールのバージョンなど)
少し調べてみたのですが、Xserver(利用しているサーバーがXserver)だとmysqli_stmt_get_result()が利用できない可能性が高いという仮説が立ちました。なので、mysqli_stmt_get_result()を利用しないで、mysqli_stmt_get_result()と同じ機能を実現させたいと考えております。よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。