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

Inserisci BLOB nei database MySql con php

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