Bene, l'argomento è stra ritrito, oramai direi pure omogeneizzato, però certe cose rimangono in mente ed è sempre più difficile correggersi.
Il problema più grosso, al solito, è riconoscere l'errore la dove non sembrano essercene.
Fatta questa doverosa premessa vengo al dunque: dovendo rifare un sito, il quale tra l'altro presenta un migliaglio circa di immagini raccolte in una cartella del filesystem, tutte JPG tra l'altro; ho avuta la bella pensata di metterle tutte in un record.
Così, preso il record corrente, con tutte le belle didascalie, titoli e riferimenti alle immagini presenti nel filesystem, ci ho inserito un bel campo chiamato foto come MEDIUMBLOB ( le immagini solo dell'ordine dei 50Kb max. ) ed ho creata una routine che le carica dentro ogni record del database. Bene!
Poi mi creo il classico failetto
 che dato un certo ID carica l'immagine corrispondente... e no, manco pe gnente!
	
	
	
		
Che come si vede, porta i segni delle mie prove ( poche ) ma che non danno gli esiti sperati.
Allora mi viene il dubbio di aver sbagliato a caricare le immagini nel database!
Solo che non so come e dove, dato che nel database le immagini ci sono, ne ho pure scaricata una ( da phpMyAdmin ), una di quelle che mi davano errore, e l'ho visualizzata correttamente nella cartella di destinazione!
Comunque il semplice programma di caricamento è questo:
	
	
	
		
Forse ho commesso l'errore di non codificare le immagini prima di caricarle nel database? E se sì come?
base64 o cosa? e perché?
				
			Il problema più grosso, al solito, è riconoscere l'errore la dove non sembrano essercene.
Fatta questa doverosa premessa vengo al dunque: dovendo rifare un sito, il quale tra l'altro presenta un migliaglio circa di immagini raccolte in una cartella del filesystem, tutte JPG tra l'altro; ho avuta la bella pensata di metterle tutte in un record.
Così, preso il record corrente, con tutte le belle didascalie, titoli e riferimenti alle immagini presenti nel filesystem, ci ho inserito un bel campo chiamato foto come MEDIUMBLOB ( le immagini solo dell'ordine dei 50Kb max. ) ed ho creata una routine che le carica dentro ogni record del database. Bene!
Poi mi creo il classico failetto
Allora controllo e modifico il programma di visualizzazione:The image cannot displayed because it contains errors!
		PHP:
	
	ob_start();
session_start();
session_regenerate_id();
try
{
    function giveAPicture($id)
    {
        try
        {
            $conn = PDOConnetti();
            $handle = $conn->prepare('SELECT foto, attivo FROM immagini WHERE id=:id LIMIT 1;');
            $handle->bindValue(':id', (int)$id, PDO::PARAM_INT);
            $handle->execute();
            $giochi = $handle->fetch();
            unset( $conn, $handle );
        }
        catch (PDOException $e)
        {
            echo $e->getTraceAsString() . '<br><br>';
            echo $e->getCode() . '<br>' .
                    $e->getFile() . '<br>' .
                    $e->getLine() . '<br><br>' .
                    $e->getMessage();
        }
        return $giochi;
    }
    if (filter_has_var(INPUT_POST, 'id') && filter_has_var(INPUT_GET, 'id') > 0 )
    {
        $file = giveAPicture(filter_var($_GET['id'], FILTER_VALIDATE_INT));
        if ($file['attivo'] == 1)
        {
            if ($file['foto'] != null)
            {
                header('Content-Type: image/jpeg');
                //  echo $file['foto'];
                //  echo 'data:image/jpeg;base64,' . base64_decode($file['foto']);
                echo 'data:image/jpeg;base64,' . base64_encode($file['foto']);
            }
        }
    }
    else
    {
       
    }
}
catch (Exception $ex) {
    echo 'ERRORE GENERICO<br><br>';
    echo $ex->getTraceAsString() . '<br><br>' .
            $ex->getCode() . '<br>' .
            $ex->getFile() . '<br>' .
            $ex->getLine() . '<br>' .
            $ex->getMessage();
}
	Allora mi viene il dubbio di aver sbagliato a caricare le immagini nel database!
Solo che non so come e dove, dato che nel database le immagini ci sono, ne ho pure scaricata una ( da phpMyAdmin ), una di quelle che mi davano errore, e l'ho visualizzata correttamente nella cartella di destinazione!
Comunque il semplice programma di caricamento è questo:
		PHP:
	
	try
{
    include_once __DIR__ . '/bin/genericFunction.inc.php';
   
    $conn = PDOConnetti();
    $sql = 'UPDATE immagini SET foto = :foto WHERE url_immagine = :url;';
    $handle = $conn->prepare($sql);
    echo '<h1>Immagini</h1><h2>Salvataggio foto nel DB</h2><hr>';
    foreach(glob('foto/*.jpg') as $name)
    {
        if (!is_dir($name))
        {
            if (is_readable($name))
            {
                $fp = fopen($name, 'rb');
                $content = fread( $fp, filesize($name));
                fclose($fp);
                if ( strlen($content) > 0 )
                {
                    $url = basename($name);
                    echo '<p>Sto salvando: <strong>' . $url . '</strong></p>';
                    $handle->bindValue( ':foto', $content, PDO::PARAM_LOB );
                    $handle->bindValue( ':url', $url, PDO::PARAM_STR );
                    $handle->execute();
                }
            }
        }
    }
    unset($conn, $handle );
   
}
catch (PDOException $e)
{
    echo 'ERRORE DATABASE:<br><br>';
    echo $e->getTraceAsString() . '<br><br>';
    echo $e->getCode() . '<br>' .
            $e->getFile() . '<br>' .
            $e->getLine() . '<br><br>' .
            $e->getMessage();
}
catch (Exception $e)
{
    echo 'ERRORE CODICE:<br><br>';
    echo $e->getTraceAsString() . '<br><br>';
    echo $e->getCode() . '<br>' .
            $e->getFile() . '<br>' .
            $e->getLine() . '<br><br>' .
            $e->getMessage();
}
	base64 o cosa? e perché?