$query="insert into t_personalpub(f_usercode,f_photo1) 
            values('$f_user','$imagecontent')";
试试

解决方案 »

  1.   

    把读出来的文件用base64_encode算一下再放到数据库吧
      

  2.   

    哇塞,老兄这样的代码怎这样写
    $file_name = "D:\\phproot\\rencai.jpg";
    ...
    if ($fp = fopen($file_name, "r"))
    {
        $buf = fread($fp, $psize);
        fclose($fp);  //开了的句柄要关
    }
    else
        $buf = 0;
    if ($buf)
    {
        $imagecontent = addslashes($buf);
        //光addslashes()好像还不行,ASCII在31以下的好像会有问题,自己试试
    ...
        sybase_query(...);
    }
      

  3.   

    这种问题我遇到过:
    因为图片中存在一些字符,会让数据库产生误解
    所以
    把读出来的文件用base64_encode算一下再放到数据库
    读文件的时候用base64_decode函数解码<?
        include("phpdb.php");           //连接数据库
        //将读入的图片上传数据库
        $f_user="3711";
        $file_name="D:\phproot\\rencai.jpg";
        $psize=filesize($file_name);
        $imagecontent=base64_encode(addslashes(fread(fopen($file_name,"r"),$psize)));    $query="insert into t_personalpub(f_usercode,f_photo1) 
                values ('$f_user','$imagecontent')";
        if($file_name!="none" and $file_name!="") 
    {
           sybase_query($query) or die("Can't Perform Query");//第12行
        }
    ?>
      

  4.   

    1、表t_personalpub的f_photo1字段必须能存储二进制数据
    2、$file_name="D:\phproot\\rencai.jpg";
       $psize=filesize($file_name);
       $imagecontent=addslashes(fread(fopen($file_name,"r"),$psize));
    改成
       $file_name="D:\\phproot\\rencai.jpg";
       $imagecontent=addslashes(fread(fopen($file_name,"rb"),filesize($file_name)));
    linux下可以不要“b”,按你的路径描述应该是在win下
      

  5.   

    远程数据库所用为sybase,操作系统为LINUX
    本地所用操作系统为WINDOWS SERVER 2000
    数据库中相关图片字段为IMAGE类型今天实验后,发现可以顺利的往数据库中提交数据,但再从数据库中输出数据时,
    页面无图象显示,只显示数字“20”,打开SYBASE 数据库查看,发现该图象字段中数据
    为”0X20“,初步分析,怀疑可能是数据库未能有效的接受数据。
    (正常该字段应该显示很长的16进制的数)//    修改后的数据库上传图片代码:upload.php
    <?
        include("phpdb.php");    //将读入的图片上传数据库    $f_user="3711";
    $file_name="D:\\phproot\\rencai.jpg";
    echo "file=$file_name";
        $psize=filesize($file_name);
    if ($fp=fopen($file_name,"rb"))
    {
    $buf=fread($fp,$psize);
    fclose($fp);
    }
    else
       $buf=0;
    if($buf=0)
    {
    $imagecontent=addslashes($buf);
    $imagecontent = base64_encode($imagecontent);
            //base64_encode函数,加与不加均已试过,但都不行。
    }
        $query="insert into t_personalpub(f_usercode,f_photo1) values ('$f_user','$imagecontent')";
        if($file_name!="none" and $file_name!="") 
    {
           sybase_query($query) or die("Can't Perform Query");
        }
    ?>//    从页面中显示图片代码:showpic.php
    <?php
      include("phpdb.php");
      header("Content-type: image/jpeg");
      $f_usercode="3711";
      $sql_str="select * from t_personalpub where f_usercode='$f_usercode'";
      $query=sybase_query($sql_str);
      if($rs=sybase_fetch_array($query))
      {
         $picdata= $rs[f_photo1] ;
         $picdata= base64_decode($rs[f_photo1]) ;
      }
         echo $picdata;
    ?>
      

  6.   

    以RB方式打开文件,也试了,但还是存在那个问题  
    $imagecontent=addslashes(fread(fopen($file_name,"rb"),filesize
      

  7.   

    由于我没有用过sybase,所以只能提出一般性建议:
    先判断问题出在哪一段。
    在入库后,把$imagecontent写入到文件
    输出时,用文件内容代替$picdata
    若成功说明问题可能出在数据库或传输上,因为数据库是远程的
      

  8.   

    ....
    //if($buf=0) //<--这里错了
    if ($buf)     //或if ($buf!=0)
    {
        //$imagecontent = addslashes($buf);  //去掉它吧
        $imagecontent = base64_encode($buf);
        $query="insert into t_personalpub (f_usercode,f_photo1) values ('$f_user','$imagecontent')";
        sybase_query($query) or die("Can't Perform Query");
    }
      

  9.   

    BASE64编码是最好的解决办法以前我都用XMLRPC通过BASE64编码传图片,一点问题都没有
      

  10.   

    不错
    manyou(他山之石) 的方法值得一试addslashes是与mysql相容的函数,不同数据库需要转义的字符并不相同
    比如foxpro 需转义 “\r” => “”
        Access 需转义 “'” => “''”
      

  11.   

    你用base64方法通不过可能是字段类型有问题:
    将' " \用正则表达式替换为\' \" \\再存入数据库:$imagecontent = str_replace("\\", "\\\\", $imagecontent); //"\" -> "\\"
    $imagecontent = str_replace("'", "\\'", $imagecontent); //"'" -> "\'"
    $imagecontent = str_replace('"', "\\\"", $imagecontent); //""" -> "\""
      

  12.   

    非常感谢大家的关注和指点,今天我又试了试,一种是套用正则表达式,一种是以FORM表单的方式,但两者运行后,输入到数据库中的数据都是OX20,我感觉诸位对我的指点已经够到家的了,可为什么我总是没能很好的把它调试出来,看来我真得尽快努力提高自己的技术水平!
                /////////////////////////////////
    <?          //   采用正则表达式,upload.php  //
                /////////////////////////////////
        include("phpdb.php");    //将读入的图片上传数据库
        $f_user="3724";
    $file_name="D:\\phproot\\rencai.jpg";
    //echo "file=$file_name";
        $psize=filesize($file_name);
    //echo"size= $psize";
    if ($fp=fopen($file_name,"r"))
    {
    $buf=fread($fp,$psize);
    fclose($fp);
    }
    else
       $buf=0;
    if($buf)
    {
    //$imagecontent = base64_encode($imagecontent);加与不加,均已试过,都不行
       $imagecontent = str_replace("\\", "\\\\", $imagecontent); //"\" -> "\\"
    $imagecontent = str_replace("'", "\\'", $imagecontent); //"'" -> "\'"
    $imagecontent = str_replace('"', "\\\"", $imagecontent); //""" -> "\""
    }
        $query="insert into t_personalpub(f_usercode,f_photo1) values ('$f_user','$imagecontent')";
        if($file_name!="none" and $file_name!="") 
    {
           sybase_query($query) or die("Can't Perform Query");
        }
    ?>
         //////////////////////////////////////
    <?   //  采用FORM表单的方式,来上传图片  //
         //////////////////////////////////////if($confirm) 
    {    //存储图片数据//读入上传的图片数据
        include("phpdb.php");    //将读入的图片上传数据库
        $f_user="3706";
    //$file_name="D:\\phproot\\rencai.jpg"; //echo "file=$file_name";
        $psize=filesize($file_name);         //echo"size= $psize";
    if ($fp=fopen($file_name,"r"))
    {
    $buf=fread($fp,$psize);
    fclose($fp);
    }
    else
       $buf=0;
    if($buf)
    {
    $imagecontent = base64_encode($imagecontent);
         //   echo "$imagecontent"; }
        $query="insert into t_personalpub(f_usercode,f_photo1) values ('$f_user','$imagecontent')";
        if($file_name!="none" and $file_name!="") 
    {
           sybase_query($query) or die("Can't Perform Query");
        }
    }
    ?>
    <!-- 文件提交表单: -->
    <form name="form1" method="post" action="" enctype="multipart/form-data">
      <input type="file" name="file_name">
      <input type="submit" name="confirm" value="Submit">
    </form>问题1:   采用FORM表单的方式,来上传图片,该方式未调试通过,但能往数据库写信息,系统提示出错,什么意思?
          f_usercode 为主键,且没有重复值
    //Warning: sybase_query() [function.sybase-query]: Sybase: Server message: Attempt to insert duplicate //key row in object 't_personalpub' with unique index 't_personal_f_user_16570569391' (severity 14, //procedure N/A) in D:\phproot\upload.php on line 25//Warning: sybase_query() [function.sybase-query]: Sybase: Server message: Command has been aborted. //(severity 10, procedure N/A) in D:\phproot\upload.php on line 25
    //Can't Perform Query
    问题2:上传图片是否必须以FORM表单提交的方式?
    问题3:下一步我该从哪个方面找问题?该图象字段为IMAGE类型,不应该会有太短的字符长度限制吧。
      

  13.   

    //$imagecontent = base64_encode($imagecontent);加与不加,均已试过,都不行
    当然不行啦,是:$imagecontent = base64_encode($buf);!!!下一步你该去学怎样编写程序!!!
      

  14.   

    网友nhconch(海风轻拂) ,教训的很对,一个人本来技术不行就够呛的了,还这么粗心,真的是不能原谅,我无地自容,我以后一定注意,不可以再犯这种低级错误!代码我改了,并经过了调试,所遇到的问题还是那几个。诸位无论对我指点,还是批评,只要是说的对,那对我就是莫大的帮助!我都由衷的感谢你们对我的帮助!
                /////////////////////////////////
    <?          //   采用正则表达式,upload.php  //
                /////////////////////////////////
        include("phpdb.php");    //将读入的图片上传数据库
        $f_user="3724";
    $file_name="D:\\phproot\\rencai.jpg";
    //echo "file=$file_name";
        $psize=filesize($file_name);
    //echo"size= $psize";
    if ($fp=fopen($file_name,"r"))
    {
    $buf=fread($fp,$psize);
    fclose($fp);
    }
    else
       $buf=0;
    if($buf)
    {
                      $imagecontent=$buf;
       $imagecontent = str_replace("\\", "\\\\", $imagecontent); //"\" -> "\\"
    $imagecontent = str_replace("'", "\\'", $imagecontent); //"'" -> "\'"
    $imagecontent = str_replace('"', "\\\"", $imagecontent); //""" -> "\""
    }
        $query="insert into t_personalpub(f_usercode,f_photo1) values ('$f_user','$imagecontent')";
        if($file_name!="none" and $file_name!="") 
    {
           sybase_query($query) or die("Can't Perform Query");
        }
    ?>
         //////////////////////////////////////
    <?   //  采用FORM表单的方式,来上传图片  //
         //////////////////////////////////////if($confirm) 
    {    //存储图片数据//读入上传的图片数据
        include("phpdb.php");    //将读入的图片上传数据库
        $f_user="3706";
    //$file_name="D:\\phproot\\rencai.jpg"; //echo "file=$file_name";
        $psize=filesize($file_name);         //echo"size= $psize";
    if ($fp=fopen($file_name,"r"))
    {
    $buf=fread($fp,$psize);
    fclose($fp);
    }
    else
       $buf=0;
    if($buf)
    {
                      $imagecontent=$buf;
    $imagecontent = base64_encode($imagecontent);
         //   echo "$imagecontent"; }
        $query="insert into t_personalpub(f_usercode,f_photo1) values ('$f_user','$imagecontent')";
        if($file_name!="none" and $file_name!="") 
    {
           sybase_query($query) or die("Can't Perform Query");
        }
    }
    ?>
    <!-- 文件提交表单: -->
    <form name="form1" method="post" action="" enctype="multipart/form-data">
      <input type="file" name="file_name">
      <input type="submit" name="confirm" value="Submit">
    </form>