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 () также освобождает дескриптор оператора. Если текущий оператор имеет ожидающие или непрочитанные результаты, эта функция отменяет их, чтобы можно было выполнить следующий запрос.
Я не вижу, что они говорят, что важно закрыть, чтобы выполнить второе подготовительное заявление. Я что-то пропустил?