Problém
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
Tím se v PHP vytvoří řetězec s názvem $sql
. Zapomeňte na chvíli na MySQL, protože ještě neprovádíte žádný dotaz. Právě stavíte řetězec.
Kouzlo PHP znamená, že můžete napsat název proměnné — řekněme $this->image_id
— uvnitř dvojité uvozovky a proměnná se stále magicky rozšiřují.
Tato funkce, známá jako "variabilní interpolace", se u volání funkcí nevyskytuje. Takže vše, co zde děláte, je psaní řetězce "file_get_contents($tmp_image)"
do databáze.
Řešení (1)
Chcete-li tedy zřetězit výsledek volání file_get_contents($tmp_image)
, musíte vyskočit z provázku a dělat věci explicitně:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
(Jak to fungovalo, můžete vidět i jen ze syntaxe.)
Řešení (2)
Nyní máte problém s tím, že pokud binární data obsahují jakýkoli '
, váš dotaz není platný. Takže byste to měli spustit přes mysql_escape_string
k dezinfekci pro operaci dotazu:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
Řešení (3)
Nyní máte opravdu velký řetězec a vaše databáze je stále objemná.
Raději neukládat obrázky v databázích , kde tomu můžete pomoci.