質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

受付中

mysqli_stmt_get_result()の代替コードを知りたい

koujan
koujan

総合スコア0

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1回答

0評価

0クリップ

539閲覧

投稿2020/09/30 04:35

前提・実現したいこと

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()と同じ機能を実現させたいと考えております。よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。