PHP Prepare метод не работает при вызове его дважды?

Я использую метод подготовки следующим образом:

$db= new mysqli("localhost","***","***","***");

if ($db->connect_error) {
  die('Connection Error');
}

$id = 1;
if($stmt = $db->prepare('SELECT name FROM table WHERE id = ? '))
{
  $stmt->bind_param('i', $id);
  $stmt->execute();
  // $stmt->close();
  echo "Success<br>";
}
else {
  echo "Something broke :/<br>";
}

$id =2;
if($stmt = $db->prepare('SELECT name FROM table WHERE id = ? '))
{
  $stmt->bind_param('i', $id);
  $stmt->execute();
  echo "Success<br>";
}
else {
  echo "Something broke :/<br>";
  $error = $db->errno . ' ' . $db->error;
  echo $error;
}

Если я выполню сценарий, я получу

успех

Что-то сломалось: /

0

Как я могу узнать, почему метод prepare потерпел неудачу после повторного вызова? По какой-то причине$db->errno возвращает 0, что указывает на то, что ничего не пошло не так. Однако методы prepare не работают и возвращают false, поэтому я не могу проверить$stmt->error;

Я случайно обнаружил, что когда я удаляю первый$stmt->execute() вызов, затем вызов метода prepare снова работает нормально (при первом и втором вызове). Что мне здесь не хватает?

редактировать

Как подсказал Максим Ткач, если я раскомментирую

// $stmt->close();

тогда я получаю

успех

успех

Но почему это так? Я нигде не читал, что очень важно закрыть подготовительное заявление.

Это из руководства по PHP:

Закрывает подготовленное заявление. mysqli_stmt_close () также освобождает дескриптор оператора. Если текущий оператор имеет ожидающие или непрочитанные результаты, эта функция отменяет их, чтобы можно было выполнить следующий запрос.

Я не вижу, что они говорят, что важно закрыть, чтобы выполнить второе подготовительное заявление. Я что-то пропустил?

Ответы на вопрос(2)

Ваш ответ на вопрос