• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pobieranie obrazków z bazy danych MySQL do PHP

Object Storage Arubacloud
0 głosów
1,736 wizyt
pytanie zadane 10 czerwca 2017 w SQL, bazy danych przez Sebastian Szyja Bywalec (2,810 p.)

Witajcie smiley

Mam problem z wyświetleniem obrazka z bazy danych możecie mi pomóc? wink

<img src="<?php echo $row['img']; ?>">

W bazie danych obraz przechowywuję w longblob. Niestety po pobraniu go do PHP nie wyświetla się frown.

Pomożecie? Z góry dziekuję heart

 

1 odpowiedź

+3 głosów
odpowiedź 10 czerwca 2017 przez Tomek Sochacki Ekspert (227,510 p.)

Co Cię podkusiło, żeby trzymać obrazki jako longblob w bazie...? To prosty krok do stworzenia dużej, mało elastycznej i wydajnej bazy danych i trudnego przeszukiwania (w sensie długiego) rekordów.

Wg mnie w wielu przypadkach lepszym rozwiązaniem (które sam często stosuję) jest trzymanie w bazie tylko odniesienia do obrazka, w sensie np. nazwy pliku lub ścieżki z nazwą w formie ciągu znakowego. Dokładne określenie katalogu, gdzie jest zdjęcie możesz wtedy albo podać już w PHP albo określać w bazie - przy czym jeśli jest to powtarzalne to warto zapisywać to w oddzielnym polu żeby się nie powtarzać i zabezpieczyć na wypadek zmiany nazwy katalogu, gdzie trzymasz zdjęcia.

Co więcej, w takim rozwiązaniu pobierasz z bazy jedynie ścieżkę co jest bardzo szybkim select'em, a dopiero potem dokonujesz zaczytania z serwerka samego zdjęcia.

Ponad to narażasz się na problem przesyłania do klienta zbyt dużej ilości danych:

The maximum size of a BLOB or TEXT object is determined by its type, but the largest value you actually can transmit between the client and server is determined by the amount of available memory and the size of the communications buffers. You can change the message buffer size by changing the value of themax_allowed_packet variable, but you must do so for both the server and your client program. 

(jest to wyciąg ze specyfikacji MySQL 5.7).

A wracając do Twojego posta to pytanie, czy przypadkiem błąd nie leży właśnie w zwracanych danych? W polu longblog prawdopodobnie przechowujesz wartość binarną, czyli de facto zawartość obrazka, natomiast atrybut "src" spodziewa się dostać ścieżkę do pliku, który ma pobrać. Spróbuj więc w bazie zapisać samą ścieżkę do obrazka i ją przekazać do "src=..." (pamiętaj również, żeby w ścieżce do pliku zawrzeć rozszerzenie, czyli np. 'obrazek.jpg').

Przechowuj więc obrazki w polu VARCHAR. Pole TEXT nie jest najlepsze ponieważ nieco trudniej je efektywnie przeszukiwać - są co prawda indeksy FULLTEXT ale myślę, że dla tego typu operacji wyszukiwania nie ma to sensu. Pole VARCHAR ma wystarczająco dużą "pojemność" żeby przechować ścieżkę dostępu do pliku.

komentarz 10 czerwca 2017 przez Sebastian Szyja Bywalec (2,810 p.)
Dziękuję :)

Wiesz może jak przechowywać to w katalogu images i automatycznie po wgraniu pliku tworzyć do niego odnośnik :D
komentarz 10 czerwca 2017 przez Tomek Sochacki Ekspert (227,510 p.)

w PHP pobierasz z bazy nazwę pliku, np. "obrazek5.jpg" i tą wartość przekazujesz do HTML tworząc element <img />:

<?php
echo '<img src="images/obrazek5.jpg"/>';
?>

tylko, że "obrazek5.jpg" trzeba pobrać z jakieś zmiennej - musiałbyś podać więcej kodu pobierającego dane z bazy, żeby można to uzupełnić. "images" możesz na sztywno ustawić w PHP lub zapisywać w bazie (ale z tym ostrożnie jeśli jest ryzyko zmian folderu).

Podobne pytania

0 głosów
2 odpowiedzi 1,366 wizyt
pytanie zadane 1 października 2017 w JavaScript przez Luryxyt Użytkownik (870 p.)
0 głosów
2 odpowiedzi 3,199 wizyt
0 głosów
1 odpowiedź 2,235 wizyt
pytanie zadane 15 maja 2017 w PHP przez Jan Patryk Kowalski Obywatel (1,880 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...