<tr>
    <td width="15%">选择图片地址:</td>
    <td width="85%"><input type="file" name="myphoto"/></td>
  </tr>
我可以上传图片,可修改就成了问题,因为图片是以二进制流blob的形式储存到数据库中,所以不知道怎么读到这个地址,就是在我修改了图片名字没修改地址时,存在数据库中的图片地址不变

解决方案 »

  1.  图片转为二进制 $img_file = 'xxx.jpg';
    $fp = fopen($img_file, 'rb');
    $content = fread($fp, filesize($img_file)); //二进制数据
    fclose($fp);查询 显示:
    <?php
    header("content-type:image/jpeg");
    list($st1,$st2)=explode(" ",microtime());
    $startTime=$st1+$st2;
    //$picContent=file_get_contents("1.jpg");
    $lnk=mysql_connect("localhost","root","123456");
    mysql_select_db("test");
    //$picContents=base64_encode($picContent);
    //$re=mysql_query("insert into pic values(NULL,'$picContents')");
    $re=mysql_query("select * from pic");
    !$re && die("查询失败!~");
    $rs=mysql_fetch_array($re);
    mysql_close($lnk);
    echo base64_decode($rs['pic']);
    list($st1,$st2)=explode(" ",microtime());
    $time2=$st1+$st2;
    echo '执行时间'.($time2-$startTime);
    ?>
    建议:将二进制数据先base64编码后,再加入数据库,不然一些特殊符号会导致插入不成功。
      

  2. 上传处理:<?php
    //由于上传过来的图片被保存在一个临时文件中,所以
    //我们仅需要读取该文件就可以获取传过来的图片
    $fp = fopen($_FILES["myFile"]["tmp_name"],"rb");
    $buf = addslashes(fread($fp,$_FILES["myFile"]["size"]));  
    //创建一个PDO对象
    $dbh = new PDO("mysql:host=localhost;port=
    3306;dbname=myDatabase", "root", "verysecret");
    //执行插入操作并将结果保存在一个变量中
    $result = $dbh->query("INSERT INTO employees 
    (firstName,lastName,EmpType,age,picture) VALUES 
    ('myFirst','myLast','myEmpType',50,'$buf')");
    //获取影响的行数
    if ($result->rowCount() >0) {
       echo("数据已插入。");
    } else {
       echo("不能执行插入操作。");
    }
    //显式的关闭PDO连接
    $dbh = NULL;
    ?>
      

  3. header("content-type:image/jpeg"); 输出的前边加上这个
      

类似问题 »