sql >> Databáze >  >> RDS >> Mysql

Vkládejte objekty BLOB do databází MySql pomocí php

Problém

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

Tím se v PHP vytvoří řetězec s názvem $sql . Zapomeňte na chvíli na MySQL, protože ještě neprovádíte žádný dotaz. Právě stavíte řetězec.

Kouzlo PHP znamená, že můžete napsat název proměnné — řekněme $this->image_iduvnitř dvojité uvozovky a proměnná se stále magicky rozšiřují.

Tato funkce, známá jako "variabilní interpolace", se u volání funkcí nevyskytuje. Takže vše, co zde děláte, je psaní řetězce "file_get_contents($tmp_image)" do databáze.

Řešení (1)

Chcete-li tedy zřetězit výsledek volání file_get_contents($tmp_image) , musíte vyskočit z provázku a dělat věci explicitně:

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

(Jak to fungovalo, můžete vidět i jen ze syntaxe.)

Řešení (2)

Nyní máte problém s tím, že pokud binární data obsahují jakýkoli ' , váš dotaz není platný. Takže byste to měli spustit přes mysql_escape_string k dezinfekci pro operaci dotazu:

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

Řešení (3)

Nyní máte opravdu velký řetězec a vaše databáze je stále objemná.

Raději neukládat obrázky v databázích , kde tomu můžete pomoci.



  1. Výjimka ORA-08103:objekt již neexistuje při použití setfetchsize Hibernate

  2. Změňte skupinu zabezpečení na instanci databáze AWS RDS

  3. Jaký je výchozí název omezení v MySQL?

  4. Červenec 2016 PSU nedokáže vytvořit isqora