Kan ik afbeeldingen opslaan in MySQL

Mogelijke duplicaten:
Afbeeldingen in MySQL
Afbeeldingen opslaan in MySQL

Ik probeer een website te ontwikkelen waar gebruikers hun afbeeldingen uploaden als onderdeel van de registratie. Ik wil dat er voor elke afbeelding een duim wordt gemaakt met PHP (wat niet zo moeilijk is). Ik wil de thumbs (aangezien ze erg klein zijn) opslaan in de database en ik gebruik MySQL. (Ik wil de thumbs niet als fysieke bestanden op de schijf opslaan.)
Staat MySQL het opslaan en ophalen van afbeeldingsgegevens toe en hoe doe ik dat? Als het geen afbeeldingsgegevens ondersteunt, is er dan een gratis database die dat wel doet? Ik zal blij zijn als een link kan worden verstrekt.
Bedankt.


Antwoord 1, autoriteit 100%

Ja, je kunt afbeeldingen in de database opslaan, maar het is naar mijn mening niet aan te raden en het is ook geen algemene praktijk.

Een algemene praktijk is om afbeeldingen op te slaan in mappen op het bestandssysteem en verwijzingen naar de afbeeldingen op te slaan in de database. bijv. pad naar de afbeelding, de naam van de afbeelding, enz. Of u kunt zelfs afbeeldingen opslaan op een content delivery network (CDN) of talrijke hosts over een groot fysiek gebied, en referenties opslaan om toegang te krijgen tot die bronnen in de database.

Afbeeldingen kunnen behoorlijk groot worden, groter dan 1 MB. En dus kan het opslaan van afbeeldingen in een database uw database en het netwerk tussen uw database en uw webserver mogelijk onnodig belasten als ze zich op verschillende hosts bevinden.

Ik heb gewerkt bij startups, middelgrote bedrijven en grote technologiebedrijven met meer dan 400K werknemers. In mijn 13 jaar professionele ervaring heb ik nog nooit iemand afbeeldingen in een database zien opslaan. Ik zeg dit om de bewering te ondersteunen dat het een ongebruikelijke praktijk is.


Antwoord 2, autoriteit 16%

Je moet opslaan als een blob, het LONGBLOB-gegevenstype in mysql zal werken.

Bijvoorbeeld:

CREATE TABLE 'test'.'pic' (
    'idpic' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    'caption' VARCHAR(45) NOT NULL,
    'img' LONGBLOB NOT NULL,
  PRIMARY KEY ('idpic')
)

Zoals anderen al hebben gezegd, het is een slechte gewoonte, maar het kan worden gedaan. Ik weet echter niet zeker of deze code goed zou schalen.


Antwoord 3, autoriteit 6%

Je kunt afbeeldingen in MySQL opslaan als blobs. Dit is echter om een aantal redenen problematisch:

  • De afbeeldingen kunnen moeilijker te manipuleren zijn: u moet ze eerst uit de database ophalen voordat bulkbewerkingen kunnen worden uitgevoerd.
  • Behalve in zeer zeldzame gevallen waarin de volledige database in RAM wordt opgeslagen, worden MySQL-databases uiteindelijk op schijf opgeslagen. Dit betekent dat uw DB-images worden geconverteerd naar blobs, in een database worden ingevoegd en vervolgens op schijf worden opgeslagen; u kunt veel overhead besparen door ze eenvoudig op schijf op te slaan.

Overweeg in plaats daarvan uw tabel bij te werken om een veld image_path toe te voegen. Bijvoorbeeld:

ALTER TABLE `your_table`
ADD COLUMN `image_path` varchar(1024)

Sla uw afbeeldingen vervolgens op schijf op en werk de tabel bij met het afbeeldingspad. Wanneer u de afbeeldingen moet gebruiken, haalt u ze op van schijf met behulp van het opgegeven pad.

Een voordelig neveneffect van deze aanpak is dat de afbeeldingen niet noodzakelijkerwijs op schijf worden opgeslagen; U kunt net zo eenvoudig een URL opslaan in plaats van een beeldpad en afbeeldingen ophalen vanaf een op internet aangesloten locatie.


Antwoord 4, Autoriteit 2%

U moet de afbeelding in de database opslaan als een BOB.

U wilt een kolom met de naam Foto in uw tabel maken en deze instellen als middelblok.

Dan wil je het van het formulier zo krijgen:

$data = file_get_contents($_FILES['photo']['tmp_name']);

en stel vervolgens de kolom in op de waarde in $ Gegevens.

Natuurlijk is dit een slechte praktijk en wil je waarschijnlijk het bestand op het systeem opslaan met een naam die overeenkomt met de gebruikersaccount.

Other episodes