sql >> Database teknologi >  >> RDS >> Mysql

Indsæt Blobs i MySql-databaser med php

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



  1. SLET VS DROP i SQL

  2. Opdater SQL med fortløbende nummerering

  3. Kaldes onUpgrade-metoden nogensinde?

  4. Hvordan bruger man en tabeltype i en SELECT FROM-sætning?