sql >> Databasteknik >  >> RDS >> Mysql

Infoga Blobs i MySql-databaser med php

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_idinuti 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.



  1. RMAN Lista backup-kommandon

  2. Salesforce TLS 1.0 Utfasning

  3. Hur anropar jag en Oracle-lagrad procedur från ett Excel VBA-skript?

  4. PostgreSQL versionskontroll med Atlassian Bitbucket