Problem
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
Tworzy to ciąg znaków w PHP o nazwie $sql
. Zapomnij na chwilę o MySQL, ponieważ nie wykonujesz jeszcze żadnego zapytania. Po prostu budujesz ciąg.
Magia PHP oznacza, że możesz napisać nazwę zmiennej — powiedzmy $this->image_id
— wewnątrz podwójne cudzysłowy i zmienna nadal magicznie się rozszerzają.
Ta funkcja, znana jako „interpolacja zmiennych”, nie występuje w przypadku wywołań funkcji. Wszystko, co tutaj robisz, to pisanie ciągu "file_get_contents($tmp_image)"
do bazy danych.
Rozwiązanie (1)
Tak więc, aby połączyć wynik wywołania file_get_contents($tmp_image)
, musisz wyskoczyć z ciągu i zrobić coś wyraźnie:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
(Widać nawet tylko ze składni podkreślającej, jak to działa).
Rozwiązanie (2)
Teraz problem, który masz, polega na tym, że jeśli dane binarne zawierają dowolny '
, Twoje zapytanie jest nieprawidłowe. Powinieneś więc uruchomić go przez mysql_escape_string
aby oczyścić go do operacji zapytania:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
Rozwiązanie (3)
Teraz masz naprawdę duży ciąg, a Twoja baza danych robi się nieporęczna.
Wolę nie przechowywać obrazy w bazach danych , gdzie możesz pomóc.