[mysql & php] Obrazki w mysql

0

Witam.
Potrzebuję przechowywać obrazki w bazie danych. Zrobiłem pewien test:

mysql> show columns from img;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| data  | blob        | YES  |     | NULL    |                |
| type  | varchar(15) | YES  |     | NULL    |                |
+-------+-------------+------+
mysql> insert into img values(NULL, load_file('/home/www/w.jpg'), 'obraz.jpg');
<?php
    header('Content-Type: image/jpeg');
    header('Content-Disposition: inline; filename=file.jpg');
    $db = mysql_connect("localhost", "login", "haslo");
    $res= mysql_query("SELECT * FROM baza.img LIMIT 1");
    if(!$res) die("ERR");
    while($row = mysql_fetch_array($res)){
        $img = $row['data'];
    }
    mysql_close($db);
//    echo "OK";
    echo $img;
//    echo base64_decode($img);
?>

Niestety obrazek jest wyświetlony do połowy
Ciekawe jest to że po wykonaniu polecenia

select load_file('/home/www/w.jpg') into outfile '/home/www/w2.jpg';  

Plik w.jpg zajmuje 117'484 a w2.jpg 122'285. Wie ktoś o co chodzi?
Co jest nie tak? Trzeba zapisywać obrazki po kodowaniu base64(nie chcę niepotrzebnie zapychać bazy danych, a dodatkowo base64 nie ma w poleceniach mysql)?

0

Wszystko fajnie tylko potrzebuję wgrać zdjęcia za pomocą poleceń sqla a nie poprzez php.

0

Plik wyświetla się do połowy prawdopodobnie dlatego, że jest zbyt duży. Pole BLOB mieści do 65535 bajtów danych.
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

Natomiast drugie zapytanie nie działa, bo OUTFILE jest do plików tekstowych. MySQL wstawia wtedy znaki ucieczki przed NULL-ami i pewnie innymi charakterystycznymi znaczkami. Zamień OUTFILE na DUMPFILE to zadziała.

1 użytkowników online, w tym zalogowanych: 0, gości: 1