2015-09-27 3 views
3

Недавно я решил сделать большой переход от 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 как на соединение?

+0

Не беспокойтесь, если у вас нет причин. Как правило, нет необходимости закрывать/отменять дескрипторы операторов. И открытие и закрытие соединения с базой данных несколько раз во время исполнения абсолютно бессмысленно. – mario

+0

@mario Являются ли соединения закрытыми автоматически через какое-то время? Что происходит, когда общее количество активных соединений превышает количество максимальных подключений, разрешенных сервером MySQL? – dimlucas

+3

Соединение с базой данных закрывается автоматически при завершении процесса PHP. Отсоединение ручки все равно не закрывает его, оно сохраняется в буфере драйвером. Поэтому восстановление класса PDO является избыточным. – mario

ответ

3

с надлежащей проверкой ошибок, конечно.

Я уверен, что проверка ошибок была не совсем подходящей. Чтобы проверить наличие ошибок, вам нужно установить только один параметр конфигурации mysqli (а также PDO) и оставить выполнение отдельных запросов отдельно.

После запроса я всегда закрываю оператор и соединение с базой данных.

Говоря о подключении к базе данных, в случае, если вам пришлось работать более чем один запрос в том же сценарии, вы сделали это совершенно неправильно. Поскольку вам нужно было снова открыть соединение, чтобы запустить другой запрос, что замедляет ваше приложение без каких-либо причин.

При использовании PDO я закрыть соединение, установив обработчик базы данных обнулить

Так же, как с MySQLi, если вы закрываете это право в конце скрипта, это нормально, но не нужно. Но если вы закрываете его после каждого запроса, это неправильно!

Вы должны подключиться только один раз, а затем использовать эту единственную переменную соединения.

Что касается утверждений, то это зависит от вас. Большая часть переменной инструкции времени перезаписывается, что делает предыдущий экземпляр равным null. Когда вы вызываете функцию, все ее переменные имеют значение null, когда функция заканчивается. Когда скрипт php заканчивается, все его переменные снова устанавливаются в null. Таким образом, не о чем беспокоиться, как правило.