Мне удалось найти очень мало информации о том, что происходит под капотом здесь. Я использую фреймворк Yii 1.1, но не верю, что это связано с этой проблемой. По сути, я использую этот код для вставки больших файлов в свою базу данных (сотни мегабайт).
$sql = "
UPDATE {$this->tableName()}
SET `$column` = :value
WHERE `$pkField` = :index
";
// $stream is a resource from fopen()
$command = Yii::app()->getDb()->createCommand($sql);
$command->bindValue(':index', $id);
$command->bindValue(':value', $stream, PDO::PARAM_LOB);
$command->execute()
При запуске этого файла для вставки большого файла размером 200 МБ появляется ошибка исчерпания памяти. Я думал, что связывание с PDO::PARAM_LOB
передаст мой файл в базу данных вместо того, чтобы загружать все это в память сразу. Очевидно, я не прав: p
Как PDO::PARAM_LOB
работает под капотом и с точки зрения управления памятью? Или я просто делаю это неправильно? Максимум, что я мог почерпнуть из документов , было это утверждение от php. net:
Этот пример открывает файл и передает дескриптор файла в PDO для вставки это как LOB. PDO сделает все возможное, чтобы содержимое файла было передано в базу данных наиболее эффективным способом.