Problema
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
Questo crea una stringa in PHP denominata $sql
. Dimentica MySQL per un minuto, perché non stai ancora eseguendo alcuna query. Stai solo costruendo una stringa.
La magia di PHP significa che puoi scrivere un nome di variabile, ad esempio $this->image_id
— dentro le virgolette doppie e la variabile vengono ancora espanse magicamente.
Questa funzionalità, nota come "interpolazione di variabili", non si verifica per le chiamate di funzione. Quindi, tutto ciò che stai facendo qui è scrivere la stringa "file_get_contents($tmp_image)"
nel database.
Soluzione (1)
Quindi, per concatenare il risultato della chiamata a file_get_contents($tmp_image)
, devi saltare fuori dalla stringa e fare le cose in modo esplicito:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
(Puoi vedere anche solo dalla sintassi che evidenzia come ha funzionato.)
Soluzione (2)
Ora il problema che hai è che se i dati binari contengono qualsiasi '
, la tua richiesta non è valida. Quindi dovresti eseguirlo tramite mysql_escape_string
per sanificarlo per l'operazione di interrogazione:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
Soluzione (3)
Ora hai un davvero big string e il tuo database sta diventando ingombrante.
Preferisco non archiviare immagini nei database , dove puoi aiutarlo.