PHP convertir le fichier de l'Image binaire de la chaîne

Je veux convertir une image que j'ai récupérer à partir d'un formulaire de chaîne binaire afin que je puisse l'insérer dans un sqlplus table. J'ai regardé comment faire cette conversion et j'ai trouvé que la plupart des solutions ont ce:

exemple de tableau:

CREATE TABLE images (
    image_id int,
    image blob 
    PRIMARY KEY (image_id));

Forme:

<form method="post" enctype="multipart/form-data" action="./Upload/UploadImage.php">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><span style="color: #FF0000;">*</span><br/>
<input type="submit" name="uploadImage" value="Upload Image"></form>

Proposé De Solution De Conversion:

<?php
    $data = file_get_contents($_FILES["file"]["tmp_name"]);
    $encoded_data = base64_encode($data);
    //echo the data to check it's there
    echo "Encoded Data: " . $encoded_data;
?>

Si je écho $data - je obtenir un pêle-chaîne, mais si je me fais l'écho $encoded_data je viens d'obtenir: Encoded Data: puis plus rien.

Je veux être en mesure d'insérer cette de données binaires dans ma db à l'aide de

$sql = 'INSERT INTO images VALUES (1, \'' . $encoded_data . '\')';

(Je sais que c'est juste la chaîne sql - l'exécution de l'instruction n'est pas quelque chose que j'ai senti le besoin d'inclure).

Mise à JOUR: j'ai réalisé que j'avais un type dans mon $encoded_data = base64_encode($data); ligne fonctionne de sorte que maintenant, mais le sql jette un littéral de chaîne trop longue erreur.

  • Je vous suggère fortement de stocker des images dans la base de données.
  • il est, malheureusement, une exigence que je conserver ce qu'une goutte. Même si je reconnais que c'est pas vraiment pratique.
  • Que faire si vous var_dump($data)? Le stockage de fichiers en DB causes de trafic élevé entre les bases de données et serveur Web
  • Juste magasin $data c'est ce BLOB est pour. Vous avez encore besoin de l'échapper avec mysqli_real_escape_string ou de l'utilisation des requêtes préparées.
  • J'ai réalisé que mon $encoded_data = base64_encode($data); avait une faute de frappe. Donc maintenant que les œuvres. @AbraCadaver je suis en utilisant sqlplus pas mysql - j'ai essayé d'utiliser addslashes($data), mais il provoque une erreur inconnue dans mon sql exécution. Si j'utilise les données codées-je obtenir le littéral de chaîne trop longue erreur.
  • Quel est le type de champ de l'image dans votre tableau? Est-il un texte ou autre chose?
  • Il est blob @Javad
  • Ensuite, vous n'avez pas besoin d'utiliser base64_encode vous pouvez directement enregistrer le résultat de file_get_contents. Si vous vous inquiétez au sujet de certains illégale de mots que vous pouvez appliquer mysql_escape_string de contenu
  • C'est la première chose que j'ai essayé $sql = 'INSERT INTO images VALUES (1, \'' . $encoded_data . '\')'; suivie par $stid = oci_parse($conn, $sql); et $res = oci_execute($stid); mais il semble avoir une erreur et il doit être indéfini, parce que j'essaie d'imprimer l'erreur, mais il n'a pas n'a pas de sortie.
  • Je suppose que ce n'est pas parce que PHP c'est à cause de votre DB qui est SQLPlus (j'ai trouvé cet article sur SQLPlus et PHP [oracle.com/webfolder/technetwork/tutorials/obe/db/oow10/php_db/... s'il vous plaît vérifier à l'Aide de LOBs: le Téléchargement et l'Interrogation des Images seciotn)
  • ah vous avez raison - la solution proposée dans cet article est adapté. Merci de me pointer vers cet article, il s'est révélé extrêmement utile pour quelques autres choses que je travaillais sur ainsi.

InformationsquelleAutor wenincode | 2014-03-19