• 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

VPS Starter Arubacloud
0 głosów
1,870 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,490 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,490 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,480 wizyt
pytanie zadane 1 października 2017 w JavaScript przez Luryxyt Użytkownik (870 p.)
0 głosów
2 odpowiedzi 3,515 wizyt
0 głosów
1 odpowiedź 2,541 wizyt
pytanie zadane 15 maja 2017 w PHP przez Jan Patryk Kowalski Obywatel (1,880 p.)

93,015 zapytań

141,978 odpowiedzi

321,271 komentarzy

62,358 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...