До сих пор я использовал PDO->bindParam
но, читая руководство, я обнаружил PDO->bindValue
из того, что я могу сказать, что PDO->bindValue
передает значение, когда PDO->bindParam
проходит по ссылке, является ли это единственной разницей?
$modThread = db()->prepare("UPDATE `threads` SET `modtime` = UNIX_TIMESTAMP( ) WHERE `threadid` =:id LIMIT 1"); while(something) { $modThread->bindParam(':id', $thread); $modThread->execute(); //*******************HERE********************// }
в$modThread = db()->prepare("UPDATE `threads` SET `modtime` = UNIX_TIMESTAMP( ) WHERE `threadid` =:id LIMIT 1"); while(something) { $modThread->bindParam(':id', $thread); $modThread->execute(); //*******************HERE********************// }
Снова при чтении руководства я обнаружил: PDO->closeCursor
следует помещать его там, где отмечено? Это необязательно / автоматически называется? Кажется, это нужны только определенным водителям. Позвонит ли он этому драйверу, который не нуждается / поддерживает его, вызывая ошибки? Как насчет MySQL?
«Повторяющийся» bindParam()
здесь не нужен:
$thread = 0; $modThread->bindParam(':id', $thread); while($thread < 20) { $thread++; $modThread->execute(); //executing with the new value, which you couldn't do with bindValue }
Вам не нужен closeCursor()
когда нет набора результатов (т. closeCursor()
Только с SELECT
или процедурами, возвращающими результаты), но обычно я уже делал fetchAll где-то в предыдущем выражении / строке.
Это неверно. Если вам нужно использовать closeCursor, одно из самых оптимальных времен для команд вставки / обновления / удаления, и редко для операторов SELECT, для которых вы уже получили результаты.
Например, если вы выберете все записи из таблицы, а затем выпустите $ stmt-> fetch (), это фактически приведет к цели closeCursor сразу, так как строки теперь больше не находятся в статусе необработанного.
Из руководства:
Этот метод полезен для драйверов баз данных, которые не поддерживают выполнение объекта PDOStatement, когда ранее выполненный объект PDOStatement по-прежнему имеет свободные строки. Если ваш драйвер базы данных страдает от этого ограничения, проблема может проявиться в ошибке вне очереди.
Когда вам действительно понадобится closeCursor в любом из следующих случаев:
Если вам не нужен оператор closeCursor:
Точно так же полезно для закрытия курсора unset () (т.е.: unset ($ stmt)) и установка оператора в значение null ($ stmt = null), открывая двери для встроенного сборщика мусора, чтобы очистить все.
Дополнительную информацию см. В руководстве: http://php.net/manual/en/pdostatement.closecursor.php