Problem
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
Detta skapar en sträng i PHP som heter $sql
. Glöm MySQL för en minut, eftersom du inte kör någon fråga ännu. Du bygger bara en sträng.
Magin med PHP innebär att du kan skriva ett variabelnamn - säg $this->image_id
— inuti dubbla citattecken och variabeln utökas fortfarande magiskt.
Denna funktion, känd som "variabel interpolation", förekommer inte för funktionsanrop. Så allt du gör här är att skriva strängen "file_get_contents($tmp_image)"
in i databasen.
Lösning (1)
Så, för att sammanfoga resultatet av anropet file_get_contents($tmp_image)
, du måste hoppa ur strängen och göra saker explicit:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
(Du kan se till och med bara från syntaxen som framhäver hur detta har fungerat.)
Lösning (2)
Nu är problemet du har att om binära data innehåller någon '
, din fråga är inte giltig. Så du bör köra den genom mysql_escape_string
för att sanera den för frågeoperationen:
$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 verkligen stor sträng och din databas blir skrymmande.
Föredrar att inte lagra bilder i databaser , där du kan hjälpa det.