sql >> Database >  >> RDS >> Mysql

Blobs invoegen in MySql-databases met php

Probleem

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','file_get_contents($tmp_image)')";

Dit creëert een string in PHP genaamd $sql . Vergeet MySQL even, want je voert nog geen query uit. Je bouwt gewoon een string.

De magie van PHP betekent dat je een variabelenaam kunt schrijven, bijvoorbeeld $this->image_idbinnen de dubbele aanhalingstekens en de variabele worden nog steeds magisch uitgebreid.

Deze functionaliteit, ook wel "variabele interpolatie" genoemd, komt niet voor bij functieaanroepen. Dus alles wat je hier doet is de string "file_get_contents($tmp_image)" schrijven in de database.

Oplossing (1)

Dus, om het resultaat van het aanroepen van file_get_contents($tmp_image) samen te voegen , je moet uit de string springen en dingen expliciet doen:

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";

(Je kunt zelfs aan de syntaxis zien hoe dit heeft gewerkt.)

Oplossing (2)

Het probleem dat u nu heeft, is dat als de binaire gegevens ' . bevatten , uw zoekopdracht is niet geldig. U moet het dus door mysql_escape_string voeren om het te zuiveren voor de query-bewerking:

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";

Oplossing (3)

Nu heb je een echt grote reeks, en uw database wordt omvangrijk.

Liever niet opslaan afbeeldingen in databases , waar je het kunt helpen.



  1. Waarom zijn er hiaten in mijn IDENTITY-kolomwaarden?

  2. Oracle-tabel exporteren naar Excel-werkblad

  3. Gloednieuwe productiedatabase

  4. Inleiding tot HDFS | Wat is HDFS en hoe werkt het?