5

php / mysqliコードで致命的なエラーが発生し、46行目に次のように記載されています。

Fatal error: Call to undefined method mysqli_stmt::fetch_assoc() in ...

この致命的なエラーを削除するにはどうすればよいですか?

それが指しているコード行はここにあります:

$row = $stmt->fetch_assoc();

元のコード:

$query = "SELECT Username, Email FROM User WHERE User = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$user);
// execute query
$stmt->execute(); 
// get result and assign variables (prefix with db)
$stmt->bind_result($dbUser, $dbEmail);
//get number of rows
$stmt->store_result();
$numrows = $stmt->num_rows();                                      

if ($numrows == 1){

$row = $stmt->fetch_assoc();
$dbemail = $row['Email'];

}

更新されたコード:

$query = "SELECT Username, Email FROM User WHERE User = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$user);
// execute query
$stmt->execute(); 
// get result and assign variables (prefix with db)
$stmt->bind_result($dbUser, $dbEmail);
//get number of rows
$stmt->store_result();
$numrows = $stmt->num_rows();                                      

if ($numrows == 1){    
  $row = $stmt->fetch_assoc();
  $dbemail = $row['Email'];    
}
4

5 に答える 5

10

変数$stmtは、mysqli_resultではなくmysqli_stmt型です。mysqli_stmtクラスには、メソッド「fetch_assoc()」が定義されていません。

get_result()メソッドを呼び出すことにより、mysqli_stmtオブジェクトからmysqli_resultオブジェクトを取得できます。このためには、mysqlIndドライバーをインストールする必要があります

$result = $stmt->get_result();
row = $result->fetch_assoc();

ドライバがインストールされていない場合は、次のように結果を取得できます。

$stmt->bind_result($dbUser, $dbEmail);
while ($stmt->fetch()) {
    printf("%s %s\n", $dbUser, $dbEmail);
}

したがって、コードは次のようになります。

$query = "SELECT Username, Email FROM User WHERE User = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$user);
// execute query
$stmt->execute(); 
// bind variables to result
$stmt->bind_result($dbUser, $dbEmail);
//fetch the first result row, this pumps the result values in the bound variables
if($stmt->fetch()){
    echo 'result is ' . dbEmail;
}
于 2012-08-29T12:53:28.733 に答える
0

このステップを逃しました

$stmt = $mysqli->prepare("SELECT id, label FROM test WHERE id = 1");
$stmt->execute();
$res = $stmt->get_result(); // you have missed this step
$row = $res->fetch_assoc();
于 2012-08-29T13:02:15.250 に答える
0

変化する、

$stmt->store_result();

$result = $stmt->store_result();

変化する、

$row = $stmt->fetch_assoc();

$row = $result->fetch_assoc();
于 2012-08-29T12:55:18.093 に答える
0

私はこのコードがstackoverflowのどこかで答えとして提供されていることに気づきました:

//get number of rows
$stmt->store_result();
$numrows = $stmt->num_rows();

行数を取得しようとしましたが、行が必要ないことに気付き、番号を$stmt->store_result();取得できませんでした。私はこれを使用しました:

$result      = $stmt->get_result();
$num_of_rows = $result->num_rows;
......
$row         = $result->fetch_assoc();
$sample      = $row['sample'];
于 2015-10-30T20:34:46.670 に答える
0

Asciiomが指摘したように、mysqlndを使用するのが最善です。ただし、mysqlndのインストールが許可されていない奇妙な状況にある場合でも、それがなくてもデータを連想配列に入れることができます。この回答のコードを使用してみてください Mysqli-結果を配列にバインドします

于 2018-04-02T19:46:03.707 に答える