Я только что начал использовать подготовленные PHP-заявления и думал, что я начинаю их понимать. Однако у меня серьезные проблемы со следующим кодом, который говорит о том, что мое понимание не настолько тщательное, как я думал. Я пробовал много вариантов, но я все еще получаю фатальную ошибку.Извлечь результаты из базы данных с помощью подготовленных операторов
В основном, я использовал подготовленные операторы для вставки данных в базу данных. Этот бит работает нормально. Затем я хочу получить последнюю вставленную запись для отображения пользователю, чтобы они могли проверить, что все в порядке. Вероятно, база данных будет обновляться на регулярной основе, и при необходимости в таблицы могут быть добавлены новые столбцы. Следовательно, я не хочу связывать_результат() с заданным списком переменных, но вместо этого хочу получить ассоциативный массив, который я могу выполнить с помощью цикла. Упрощенная версия кода (без проверки ошибок) приведен ниже:
<?php
$db = new mysqli("localhost","username","password","database");
// Insert record into database using prepared statement...
// Works fine.
// Retrieve recently installed data...
$EnteredDataStmt = $db->prepare("SELECT * FROM correspondence where id = ?")
$EnteredDataStmt->bind_param('i', $LatestInsertID)
// Get ID number of latest inserted data...
$LatestInsertID = $db->insert_id;
$EnteredDataStmt->execute()
// I want to check that only 1 result is returned...
$EnteredDataStmt->store_result()
$NumResults = $EnteredDataStmt->num_rows;
if($NumResults == 1)
{
$EnteredDataResult = $EnteredDataStmt->get_result();
while ($row = $EnteredDataResult->fetch_array(MYSQLI_ASSOC)) // <- Error indicates problem at this line
{
foreach ($row as $key => $value)
{
print "<p>$key: $value</p>";
}
print "\n";
}
}
$EnteredDataStmt->close();
unset($EnteredDataResult);
$db->close()
?>
Когда я пытаюсь запустить выше PHP скрипт, я получаю фатальную ошибку следующим образом:
Fatal error: Call to a member function fetch_array() on a non-object...
Использование get_result(), за которым следует fetch_array (MYSQLI_ASSOC), результат предлагается на нескольких сайтах, но, похоже, это не работает для меня. Я тонко изменил контекст, не осознав этого? Любые предложения о том, куда я иду, будут весьма признательны.
'$ EnteredDataResult' не является объектом, потому что' $ signedDataStmt-> get_result() 'возвращает' false'. Вы должны проверить 'echo $ db-> error;', чтобы узнать, какая ошибка MySQLi держится там. –
На самом деле вызов 'get_result()' после 'store_result()' звучал знакомым мне, поэтому я оглянулся и нашел [этот ответ несколько месяцев назад] (https://stackoverflow.com/questions/28258723/how- to-check-no-of-rows-return-when-using-mysqli-stmt-prepare-and-mysqli-fetc/28258887 # 28258887) –
Основываясь на том, что я нашел в этом ответе, я думаю, вы можете избежать использования '$ EnteredDataResult = $ EnteredDataStmt-> get_result()', а затем проверить '$ EnteredDataResult-> num_rows' и получить из' $ EnteredDataResult-> fetch_array() ' –