Когда вам нужно закрыть php mysqli stmt перед подготовкой нового? - PullRequest
0 голосов
/ 22 января 2019

Если я не закрою stmt в конце этого фрагмента кода:

    $stmt = $mysqli->prepare("SELECT typeId FROM types WHERE name = 'author'");
    $stmt->execute();
    $stmt->bind_result($typeId);
    $stmt->fetch();

(с этим:)

    $stmt->close();

Тогда следующая подготовленная инструкция завершается ошибкой с кодом ошибки 0 и без ошибки:

    $stmt = $mysqli->prepare("INSERT INTO typeTracker (reserved_id, typeId) VALUES (NULL, ?)");
    $stmt->bind_param("i", $typeId);

Почему? Это потому, что я вызвал функции bind_result и fetch в первом блоке кода? Мне обычно не нужно закрывать заявления перед подготовкой новых.

Спасибо.

1 Ответ

0 голосов
/ 22 января 2019

Если $stmt заменяется или выпадает из области видимости, оно уничтожается.Вы можете закрыть его как формальность, но обычно о нем все равно заботятся.

Вызов close() немедленно освобождает любые связанные ресурсы.Если вы этого не сделаете, вам придется подождать, пока сборщик мусора позаботится об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...