Я получаю фатальную ошибку в моем коде 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']; }
Переменная $ stmt имеет тип mysqli_stmt, а не mysqli_result. Класс mysqli_stmt не имеет метода «fetch_assoc ()», определенного для него.
Вы можете получить объект mysqli_result из объекта mysqli_stmt, вызвав его метод get_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; }
Изменить,
$stmt->store_result();
в
$result = $stmt->store_result();
А также
Изменить,
$row = $stmt->fetch_assoc();
в
$row = $result->fetch_assoc();
Вы пропустили этот шаг
$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();
Я понял, что этот код был предоставлен как ответ где-то в 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'];