Недавно я решил сделать большой переход от MySQLi к PDO, и что-то меня беспокоит в отношении подготовленных заявлений PDO.Закройте заявление PDO
В MySQLi я хотел бы написать типичные выборки запроса, как это:
$db = new mysqli("localhost", "user", "pass", "mydb");
$sql = "SELECT firstCol, secondCol FROM testTable WHERE thirdCol=?";
$stmt = $db->prepare($sql);
$stmt->bind_param("s", $thirdCol);
$stmt->execute();
while(($row = $stmt->fetch()))
{
//do something
}
$stmt->close();
$db->close();
с соответствующей проверкой ошибок, конечно. После запроса я всегда закрываю оператор и соединение с базой данных. При использовании PDO я закрываю соединение, устанавливая обработчик базы данных равным нулю:
$db = null;
Но как насчет утверждения? Я нашел сообщение here, в котором предлагается либо использование unset
, либо closeCursor
. Какая из них лучше? Должен ли я просто установить его на null
как на соединение?
Не беспокойтесь, если у вас нет причин. Как правило, нет необходимости закрывать/отменять дескрипторы операторов. И открытие и закрытие соединения с базой данных несколько раз во время исполнения абсолютно бессмысленно. – mario
@mario Являются ли соединения закрытыми автоматически через какое-то время? Что происходит, когда общее количество активных соединений превышает количество максимальных подключений, разрешенных сервером MySQL? – dimlucas
Соединение с базой данных закрывается автоматически при завершении процесса PHP. Отсоединение ручки все равно не закрывает его, оно сохраняется в буфере драйвером. Поэтому восстановление класса PDO является избыточным. – mario