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

Jak wykonać UPDATE fotografii w bazie za pomocą kodu

Object Storage Arubacloud
0 głosów
472 wizyt
pytanie zadane 1 stycznia 2023 w PHP przez PtaQ Początkujący (280 p.)

Witam, problem polega na tym iż chciałbym, aby podczas akcji którą wykonuje użytkownik strony wykonywało się polecenie UPDATE konkretnego wiersza typu " BLOB ". Widziałem wiele filmików jak to wykonać ale każdy jeden zawierał opcje w której to użytkownik wybierał fotografie jaką wkłada do danego wiersza, poniżej jest kod dla prostszego zrozumienia co chcę wykonać

$Obraz='img/Zdjecie.gif';
$res=mysqli_query($conn, "UPDATE tabela SET Zdjecie=$Obraz LIMIT 1");

Z góry dziękuje za wszelką pomoc i Życzę wspaniałego nowego roku :D !

komentarz 1 stycznia 2023 przez VBService Ekspert (252,780 p.)

 BTW, smiley

wykonywało się polecenie UPDATE konkretnego wiersza typu " BLOB "

kod co zaprezentowałeś pokazuje "wrzucenie" tekstu (string)

$Obraz='img/Zdjecie.gif';
echo gettype($Obraz);

 

 

3 odpowiedzi

+2 głosów
odpowiedź 1 stycznia 2023 przez Wiciorny Ekspert (269,710 p.)

Przechowywanie plików binarnych, takich jak zdjęcia, pliki audio lub wideo, pliki PDF itp., w bazie danych relacyjnej nie jest zawsze najlepszym rozwiązaniem. Bazy danych relacyjnych są zwykle lepsze w przechowywaniu danych o strukturze tabelarycznej, takich jak dane osobowe, adresy itp.

Pliki binarne mogą być duże i przechowywanie ich w bazie danych może spowolnić jej działanie. Ponadto, bazy danych relacyjnych nie są zaprojektowane tak, aby efektywnie przechowywać duże pliki binarne. Dlatego też lepiej jest przechowywać tego typu pliki w systemie plików lub w usłudze przechowywania danych, takiej jak Amazon S3 lub Google Cloud Storage. Następnie można przechowywać adresy URL do tych plików w bazie danych relacyjnej zamiast samych plików. W ten sposób można zachować szybkość działania bazy danych, a jednocześnie mieć dostęp do plików binarnych, kiedy są potrzebne.

Aby wykonać zapytanie UPDATE możesz użyć funkcji mysqli_query() lub PDO. Poniższej przykład użycia funkcji mysqli_query()

// Tworzenie połączenia
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Sprawdzenie połączenia
if (!$conn) {
    die("Połączenie nieudane: " . mysqli_connect_error());
}

$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";

if (mysqli_query($conn, $sql)) {
    echo "Rekord został zaktualizowany pomyślnie";
} else {
    echo "Błąd podczas aktualizowania rekordu: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

Aby zaktualizować kolumnę typu BLOB, należy najpierw przeczytać plik binarny do zmiennej w PHP, a następnie użyć funkcji mysqli_real_escape_string() do przetworzenia go na ciąg tekstowy, który można umieścić w zapytaniu SQL. Poniższy kod przedstawia przykład tego, jak to zrobić:
 

// Ładowanie pliku binarnego do zmiennej
$bin_data = file_get_contents("plik.bin");

// Przetwarzanie pliku binarnego na ciąg tekstowy
$escaped_bin_data = mysqli_real_escape_string($conn, $bin_data);

$sql = "UPDATE MyTable SET bin_column='$escaped_bin_data' WHERE id=1";

if (mysqli_query($conn, $sql)) {
    echo "Rekord został zaktualizowany pomy

 

+1 głos
odpowiedź 1 stycznia 2023 przez SzkolnyAdmin Szeryf (86,360 p.)
Nie jest zalecane przechowywanie binarek w bazie danych. Znacznie lepiej przechować ścieżki do zasobów, a biharki w oddzielnym katalogu. Wtedy przesłane zdjęcie po prostu wrzucasz do katalogu, a w bazie odnotowujesz odpowiednie dane (autor, data i czas modyfikacji, itd.).
+1 głos
odpowiedź 1 stycznia 2023 przez VBService Ekspert (252,780 p.)
edycja 1 stycznia 2023 przez VBService

polecenie UPDATE konkretnego wiersza typu " BLOB "

spróbuj, np. użyć file_get_contents

// połączenie z bazą danych
$db = new mysqli( ... );

// Przygotuj zapytanie UPDATE
$stmt = $db->prepare("UPDATE tabela SET Zdjecie = ? WHERE id = 1");

// Pobierz plik obrazu i zapisz go jako ciąg binarny
$obraz = file_get_contents('img/Zdjecie.gif');

// Podepnij ciąg binarny jako parametr do zapytania
$stmt->bind_param("b", $obraz);

// Wykonaj zapytanie
$stmt->execute();

 

wersja proceduralna  ( mysqli_real_escape_string )

$conn = mysqli_connect( ... );

$sql = "UPDATE tabela SET pole_blob = '"
     . mysqli_real_escape_string($conn, file_get_contents('img/Zdjecie.gif'))
     . "' WHERE id = 1";
mysqli_query($conn, $sql);

mysqli_close($conn);

 

 

 

BTW, możesz też użyć bin2hex do konwersji binarnej zawartości pliku na szesnastkowy ciąg znaków, a następnie użyć tego ciągu do ustawienia pola BLOB w bazie danych.

$conn = mysqli_connect( ... );

$hex = bin2hex(file_get_contents('img/Zdjecie.gif'));
$sql = "UPDATE tabela SET pole_blob = 0x'$hex' WHERE id = 1";
mysqli_query($conn, $sql);

mysqli_close($conn);

 

Uwaga, ta metoda wymaga, aby pole BLOB było oznaczone jako 0x'hexstring', gdzie hexstring jest szesnastkowym ciągiem znaków.

Użycie bin2hex jest nieco wolniejsze niż file_get_contents, ponieważ wymaga dodatkowej konwersji binarnej zawartości pliku na szesnastkowy ciąg znaków. Dlatego też zalecane jest użycie file_get_contents.

Insert Blobs in MySql databases with php ]

Podobne pytania

0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 26 września 2015 w SQL, bazy danych przez wanderer Gaduła (3,710 p.)
0 głosów
1 odpowiedź 268 wizyt
pytanie zadane 29 czerwca 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
0 odpowiedzi 202 wizyt
pytanie zadane 7 czerwca 2019 w PHP przez Pawel512 Nowicjusz (240 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 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!

...