Maison développement back-end tutoriel php php将图片保存入mysql数据库失败的解决方法_php技巧

php将图片保存入mysql数据库失败的解决方法_php技巧

May 16, 2016 pm 08:27 PM
mysql php 保存 图片 失败 数据库 解决方法

本文实例分析了php将图片保存入mysql数据库失败的解决方法。分享给大家供大家参考。具体分析如下:

图片保存数据库并不是一个明智的做法,我们多半是把图片保存到服务器,然后把图片地址保存到数据库,这样我们每次只要读出图片地址就可以显示了,但下面我还是来介绍一个图片保存到mysql数据库的问题解决办法,代码如下:

复制代码 代码如下:
require 'class/db.php';
$fileName = "a1.jpg";
$fp = fopen($fileName, "r");
$img = fread($fp, filesize($fileName));
fclose($fp);
 
$db->execute("insert db2.testimg (`img`) values ('$img') ;");

报错:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`?绶q?仳!????1丶>,Mo?'^WZ4in??T春??????U?楹?' at line 1

代码如下:

复制代码 代码如下:
$img = fread($fp, filesize($fileName));
$img = addslashes($img)

继续报错,各种搜索,百度里的结果都是addslashes,要不就是addslashes也没有的,真是扯淡啊.

复制代码 代码如下:
base64_decode
$img = base64_encode($img);

插入成功,图片文件17.0k,出来进行base64_decode,显示正常,找到个16进制的办法:

复制代码 代码如下:
$img = bin2hex($img);

有效,输出不用解密,存入数据库很大 25K,比base64还坑爹呢,再找,后来,后来,发现phpmyadmin直接上传的图片文件可以用文件比base64的小,文件12.8k.

翻phpmyadmin 源代码,common.lib.php文件183有个神奇的函数,代码如下:

复制代码 代码如下:
function PMA_sqlAddslashes($a_string = '', $is_like = false, $crlf = false, $php_code = false)
{
    if ($is_like) {
        $a_string = str_replace('\', '\\\\', $a_string);
    } else {
        $a_string = str_replace('\', '\\', $a_string);
    }
 
    if ($crlf) {
        $a_string = str_replace("n", 'n', $a_string);
        $a_string = str_replace("r", 'r', $a_string);
        $a_string = str_replace("t", 't', $a_string);
    }
 
    if ($php_code) {
        $a_string = str_replace(''', '\'', $a_string);
    } else {
        $a_string = str_replace(''', '''', $a_string);
    }
 
    return $a_string;
} // end of the 'PMA_sqlAddslashes()' function$img = PMA_sqlAddslashes($img);

文件大小12.8K 和phpmyadmin的一样大.

例,前台image.html,代码如下:

复制代码 代码如下:


  上传图片

 


 
 File:
 



后台处理upimage.php代码如下:
复制代码 代码如下:
 //向数据库中插入图片
 $imgfile=$_FILES['imgfile'];
 $submitbtn=$_POST['submitbtn'];
 if($submitbtn=='OK' and is_array($imgfile)){
 $name=$imgfile['name'];  //取得图片名称
 $type=$imgfile['type']; //取得图片类型
 $size=$imgfile['size'];  //取得图片长度
 $tmpfile=$imgfile['tmp_name'];  //图片上传上来到临时文件的路径
 if($tmpfile and is_uploaded_file($tmpfile)){  //判断上传文件是否为空,文件是不是上传的文件
  //读取图片流
  $file=fopen($tmpfile,"rb");
  $imgdata=bin2hex(fread($file,$size));  //bin2hex()将二进制数据转换成十六进制表示
  fclose($file);
 
  $mysqli=mysql_connect("localhost","root","123456″);  //连接数据库函数
  mysql_select_db("test");  //选择数据库
  //插入出数据库语句,图片数据前要加上0x,用于表示16进制数
  if(mysql_query("insert into images(name,type,image) values('".$name."','".$type."',0x".$imgdata.")"))
   echo "
插入成功!

显示图片
";
  else
   echo "
插入失败!
";
  mysql_close();
 }else
 echo "
请先选择图片!

点此返回
";
} else
 echo "
请先选择图片!

点此返回
";
?>

显示图片disimage.php,代码如下:
复制代码 代码如下:
 mysql_connect("localhost","root","123456″);
 mysql_select_db("test");
 //显示最新插入的那张图片
 $result=mysql_query("select image from images where id=(select max(id) from images)");
 $row=mysql_fetch_object($result);
 header("Content-Type:image/pjpeg");
 echo $row->image;
 mysql_close();
?>

结论:

PMA_sqlAddslashes好用 文件12.8k 和原来图片一样大

bin2hex 16进制 好用文件25K

base64_encode 好用,出来的文件需要base64_decode 17K

addslashes 不好用,继续报错,注明,在某些windows机器上addslashes好用.

希望本文所述对大家的php程序设计有所帮助。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Comment spécifier la version du package local dans les projets PNPM et MonorePO? Comment spécifier la version du package local dans les projets PNPM et MonorePO? Apr 04, 2025 pm 04:06 PM

Comment spécifier la version des packages locaux dans les projets PNPM et MonorePO lors de la gestion des projets utilisant PNPM et MonorePO, vous rencontrez souvent la nécessité de partager des zones locales entre les projets ...

Pourquoi mon code RXJS ne prend-il pas effet lors du fonctionnement sur les flux? Pourquoi mon code RXJS ne prend-il pas effet lors du fonctionnement sur les flux? Apr 04, 2025 pm 06:27 PM

Pourquoi mon code ne prend-il pas effet lors de l'utilisation de RXJ pour fonctionner sur les flux? Apprentissage RXJS ...

Gitee Pages STATIQUE Le déploiement du site Web a échoué: comment dépanner et résoudre les erreurs de fichier unique 404? Gitee Pages STATIQUE Le déploiement du site Web a échoué: comment dépanner et résoudre les erreurs de fichier unique 404? Apr 04, 2025 pm 11:54 PM

GiteEpages STATIQUE Le déploiement du site Web a échoué: 404 Dépannage des erreurs et résolution lors de l'utilisation de Gitee ...

Comment utiliser XPath pour rechercher à partir d'un nœud DOM spécifié en JavaScript? Comment utiliser XPath pour rechercher à partir d'un nœud DOM spécifié en JavaScript? Apr 04, 2025 pm 11:15 PM

Explication détaillée de la méthode de recherche XPATH sous les nœuds DOM en JavaScript, nous devons souvent trouver des nœuds spécifiques de l'arbre Dom basé sur les expressions XPath. Si vous avez besoin de ...

Quelles sont les raisons et les solutions pour le fichier serveur qui ne peuvent pas être téléchargées après la configuration SFTP.json? Quelles sont les raisons et les solutions pour le fichier serveur qui ne peuvent pas être téléchargées après la configuration SFTP.json? Apr 04, 2025 pm 06:54 PM

Solution au problème que le fichier serveur ne peut pas être téléchargé après la configuration SFTP.json Après avoir configuré le fichier SFTP.json, les utilisateurs peuvent rencontrer l'incapacité de télécharger le fichier du serveur cible ...

Element Plus Table Table Composant Max-Height n'est pas valide? Comment rendre la table très adaptable et afficher les barres de défilement? Element Plus Table Table Composant Max-Height n'est pas valide? Comment rendre la table très adaptable et afficher les barres de défilement? Apr 04, 2025 pm 04:03 PM

La défaillance de l'attribut max-hauteur du composant de la table ElementPlus et la solution consiste à utiliser l'élément ...

See all articles