Problem
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
Dette opretter en streng i PHP med navnet $sql
. Glem alt om MySQL et øjeblik, fordi du ikke udfører nogen forespørgsel endnu. Du bygger bare en streng.
Magien ved PHP betyder, at du kan skrive et variabelnavn - f.eks. $this->image_id
— inde i de dobbelte anførselstegn og variablen bliver stadig på magisk vis udvidet.
Denne funktionalitet, kendt som "variabel interpolation", forekommer ikke for funktionskald. Så alt du gør her er at skrive strengen "file_get_contents($tmp_image)"
ind i databasen.
Løsning (1)
Så for at sammenkæde resultatet af at kalde file_get_contents($tmp_image)
, du skal springe ud af strengen og gøre tingene eksplicit:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
(Du kan endda kun se fra syntaksen, der fremhæver, hvordan dette har fungeret.)
Løsning (2)
Nu er problemet du har, at hvis de binære data indeholder nogen '
, din forespørgsel er ikke gyldig. Så du bør køre det gennem mysql_escape_string
for at rense det til forespørgselsoperationen:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
Løsning (3)
Nu har du en virkelig stor streng, og din database bliver omfangsrig.
Foretrækker ikke at gemme billeder i databaser , hvor du kan hjælpe det.