Удаленный файл изображения для sqlite BLOB в PHP? - PullRequest
4 голосов
/ 04 августа 2010

У меня есть файл изображения, хранящийся на удаленном сервере. У меня есть только HTTP-доступ к серверу, поэтому я получаю его содержимое, используя file_get_contents (URL)

Мне нужно хранить этот контент в локальной базе данных sqlite3 в поле типа «blob». Я использую объект PDO для подключения к базе данных, и я использую

$db->exec("INSERT INTO myTable (myImageBlob) VALUES
           ('".file_get_contents($filePath)."')") 

для добавления данных в базу данных.

Это не работает. Извиняюсь, если я делаю действительно нубистскую ошибку. Мы все должны как-то учиться ...

По причинам, в которые я не буду углубляться, я не могу сохранить изображение локально и поместить URL-адрес в базу данных. Он / должен / должен храниться в BLOB-объекте.

Ответы [ 2 ]

4 голосов
/ 04 августа 2010

Не делай этого. Каждый раз, когда вы вставляете двоичные данные в базу данных, Бог убивает котенка.
Вместо этого сохраните этот образ где-нибудь в файловой системе и сохраните путь в вашей базе данных.

Не забудьте подумать о котятах!

alt text

3 голосов
/ 04 августа 2010

Объединение данных, которые вы не можете контролировать в операторе SQL, - очень плохая идея.Например, данные изображения могут содержать кавычку, которая завершит строку, или обратную косую черту, которая будет интерпретирована как управляющий символ.В худшем случае кто-то может создать поддельное изображение для внедрения вредоносного кода SQL в ваше приложение.

Я предлагаю вам использовать вместо этого подготовленный оператор:

$query = $db->prepare("INSERT INTO myTable (myImageBlob) VALUES (?)");
$query->bindParam(1, fopen($filePath, "rb"), PDO::PARAM_LOB);
$query->execute();

Обратите внимание, что, передав PDO :: PARAM_LOB bindParam() Вы вставляете данные BLOB из потока.Вот почему я использую fopen () вместо file_get_contents ()

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