这篇文章主要介绍了php将图片保存入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?'^wz4int春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,代码如下:
复制代码 代码如下: