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

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

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

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

PHP

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

Q&A

1回答

1348閲覧

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

koujan

総合スコア0

mysqli

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

PHP

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

0グッド

0クリップ

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

execute()からのデータ取得ならPHPマニュアルにサンプルコード載ってますがそれではダメなのでしょうか。
mysqli_stmt::execute

mysqliよりPDOのほうが良いかとは思いますが。

投稿2020/09/30 04:40

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問