2013-03-31 3 views
2

Я пытаюсь вставить изображение с помощью (cakephp) в sqlite DB в столбце BLOB.PHP: Вставка изображения Blob в таблицу SQLite

Я использую этот код

$insert = "INSERT INTO story (page, image) 
        VALUES (:page, :image)"; 
     $stmt = $file_db->prepare($insert); 

     // Bind parameters to statement variables 
     $img = file_get_contents($this->request->data['image']['tmp_name']); 
     $img = mysql_real_escape_string($img); 
     $stmt->bindParam(':page', $this->request->data['page']); 
     $stmt->bindParam(':image', $img); 

      // Execute statement 
      $stmt->execute(); 

и это вставка, но через символы установить не Капля данные, как это предполагают, чтобы быть .. есть ли другой способ сделать это, либо то, что является неправильным с мой код?

+0

Не используйте капли, вместо этого храните изображения в папке и сохраняйте 'filename.extension' в SQL, поэтому он не будет увеличивать размер вашей базы данных –

+0

, какой набор символов вы получаете? – egig

+0

Мне нужно сохранить его на БД :), потому что эта БД должна быть перенесена на Android позже :) и кодировка - это что-то вроде этого PNG \ r \ n \ Z \ n \ 0 \ 0 \ 0 \ rIHDR \ 0 \ 0, \ 0 \ 0� \ 0 \ 0 \ 0 \ Z/�� \ 0 \ 0 \ 0 \t pHYs \ 0 \ 0 \ 0 \ 0 \ 0�� \ 0 \ 0 \ 0 cHRM \ 0 \ 0z% \ 0 \ 0�� \ 0 \ 0�� \ 0 \ 0�� \ 0 \ 0u0 \ 0 \ 0�' \ 0 \ 0: ï¿ ½ \ 0 \ 0o�_�F \ 0��IDATxÚ����u & \ n�} ������Ld & ��0% \ 0 \ 0i ¿½ï¿½8I \ "угорь [�e�eW���Uv����j���������z] ï¿½ï¿ ½ï¿½ï¿½êª®zU�T�m� $ K�HM� (��L \ 0� \ 0cN�y��F�9g�; ��s�^�_.JH�! ��9 {ï¿ –

ответ

7

Это является ответ на вопрос, поставленный в заголовке, так как она занимает # 1 для [PHP SQLite сгустка]. Это не использует PDO, поскольку у меня были проблемы с этим. Вы должны использовать подготовленный оператор, вы, как правило, не можете выполнить буквенную вставку SQL, поскольку размер слишком велик с помощью blob. Это обновление, а не вставка, но это в основном то же самое.

// example variables 
$row_id=1; 
$image_filename="/home/mywebsite/public_html/images/an_image.png"; 
$sqlite_table_name="user_images"; 
$database_filename="database.sqlite"; 
// the blob field in the sqlite table is called ZIMAGE and the id field is ZID. 

// Code 
if (file_exists($image_filename)) { 
$db = new SQLite3($database_filename); 
$query = $db->prepare("UPDATE '{$sqlite_table_name}' SET ZIMAGE=? WHERE ZID=?"); 
$image=file_get_contents($image_filename); 
$query->bindValue(1, $image, SQLITE3_BLOB); 
$query->bindValue(2, $row_id, SQLITE3_TEXT); 
$run=$query->execute(); 
} 

Я не думаю, что есть какие-либо жесткие правила в области программирования, хранить изображения в сгустках в Sqlite в определенных ситуациях. Я также очищаю веб-страницы с регулярными выражениями вместо Xpath! Что бы ни получилось.

+0

Люди, имейте в виду, что $ db-> escapeString не является бинарным сейфом, как я и думал, так что спасибо за это решение! – Highstrike

3

Это не ответ, но есть «неясность» в этом вопросе, слишком долго, чтобы поставить его в качестве комментария

  1. Вы упоминаете CakePHP, но нет CakePHP участие в вашем вопросе
  2. Вы упоминаете «SQLite», но вы используете mysql_real_escape?

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

Что касается MySQL и хранения изображений внутри базы данных;

  • mysql_ функции в РНР осуждается и больше не поддерживается
  • попробовать всего определится, если вы действительно нужно хранить ваши изображения данныевнутри базы данных, как правило, это лучше сохранить изображение в файловой системе и имя изображения в базе данных

Re Объявление на этот вопрос для ответа на вставке изображений в MySQL:

Insert Blobs in MySql databases with php

Читать этот вопрос для ответа на вставке изображений в SQLite (с помощью PDO):

Remote image file to sqlite blob in PHP?

Вот общий PDO шаг за шагом для BLOB;

http://www.phpeveryday.com/articles/PDO-Working-With-BLOBs-P554.html

Смежные вопросы