$sql="select id,pic from htsj_fj";
$rs=mysql_query($sql,$conn);////(1)这里的是读取mysql数据库的
while($arr=mysql_fetch_array($rs))
{
$id=$arr["id"];
$pic=$arr["pic"];
$filename="./htpicup/".$pic;///(2)这里是存放的图片路径./htpicup/1234.jpg
//echo "<img src=\"$filename\">";
 
 $fp=fopen($filename,'r');//   只读形式打开文件
 $nr= fread($fp,filesize($filename)); 
 $nr=addslashes($nr);  
fclose($fp);
$sql="insert into testerjinzhi(nr,test)values('$nr','$id')";//(3)插入到mssql2005字段中,其中nr 为image 类型
$msclass->execsql($sql,$htconn);
}
插入失败:
insert into testerjinzhi(nr,test)values('\0JFIF\0\0H\0H\0\0Exif\0\0MM\0*\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0b\0\0\0\0\0\0\0j(\0\0\0\0\0\0\01\0\0\0\0\0\0\0r2\0\0\0\0\0\0\0i\0\0\0\0\0\0\0\0\0\0\0\0\0H\0\0\0\0\0\0H\0\0\0Adobe Photoshop 7.0\02012:07:20 01:12:36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0(\0\0\0\0\0\0\0\0\0\0\0\0\0&\0\0\0\0\0\0\0\0\0\0\0\0\0H\0\0\0\0\0\0H\0\0\0\0JFIF\0\0H\0H\0\0\0 Adobe_CM\0\0Adobe\0d\0\0\0\0\0            \0\0^\0\"\0\0\0?\0\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0 \0 3\0!1AQa\"q2”B#$Rb34rC%S疳cs5⒉&DTdE拢t6Ue虺糜u泱F\'脑漪サ耪艴VfvΧ浦骣7GWgwХ亲琪\05\0!1AQaq\"2”B#R佯3$brCScs4%⒉&5乱DTdEU6te怛糜u泱F脑漪サ耪艴VfvΧ浦骣\'7GWgwХ\0 \0\0?\0煲I%}RI\' J[wV,S糨TX$ч涣7TXぅ傍%傍%j⑴%?M znJE4剧d\0Kw秤E+$b\0徐I%}\\+x0sv UO棹eGtfⅣI橛挎:逊 )Pk芏=乜O6/Nm\04&绞=丿Nm\04%橛挎P坠WО部o絷\0F吒%)JZ*赧糸\0F吒%SpJR绞=丿Jm;+俚逐#嗽6冽VW%J64鸯I%}]G袤U0区 ->^4-p.浞!nKr\\*K-[ 敢nL^\\\\RW\"\\36[VW*Io[\\i++G异I%}]:-LxyQsw=翘~@D4_#OG7EoN臊~辂_i~KJ,H喻疽?t7G哺wH喻疽?t7G哺wH喻i^Uqd睿样э?$Ye抟 3O[[#t.................cs~GG\0ё','1')
msexec:[Microsoft][ODBC SQL Server Driver]语法错误或违反访问规则
思路:
我想把mysql数据库中的图片路径,转换为二进制后,插入到mssql2005的image字段中
php程序编码是utf-8
mysql编码也是utf8的mssql2005的应该是gbk或者是gb2312的

解决方案 »

  1.   

    在插入的时候,对$nr进行转码为gb2312后,可以插入了。但是在从mssql2005表里把这个图片读取出来就不行了
      

  2.   

    不太清楚是否能这样插入
    但你存在 2 个问题:
    1、应用二进制方式打开文件
    $fp=fopen($filename,'rb');//   只读形式打开文件
    2、mssql 中“'”应转义为“''”
      

  3.   

    $sql="select id,pic from htsj_fj";
    /////$replacenums=array("'"=>"''");
    $rs=mysql_query($sql,$conn);
    while($arr=mysql_fetch_array($rs))
    {
    $id=$arr["id"];
    $pic=$arr["pic"];
    $filename="./htpicup/".$pic;
     
     
     $fp=fopen($filename,'rb');//   只读形式打开文件
     $nr= fread($fp,filesize($filename)); 
     //$nr=strtr($nr,$replacenums);
     $nr=iconv("UTF-8","gbk",$nr) ;
     //$nr=addslashes($nr);  
     fclose($fp);
    $sql="insert into testerjinzhi(nr,test)values('$nr','$id')";
    $msclass->execsql($sql,$htconn);
    }我这样插入进去了,但是在读取mssql字段出来的时候array
      'id' => string '13' (length=2)
      'nr' => string '' (length=0)--------------------------------------------------------------------------------
    nr字段是空的了
      

  4.   

    $sql="select id,pic from htsj_fj";
    $replacenums=array("'"=>"''");
    $rs=mysql_query($sql,$conn);
    while($arr=mysql_fetch_array($rs))
    {
    $id=$arr["id"];
    $pic=$arr["pic"];
    $filename="./htpicup/".$pic;
     
     
     $fp=fopen($filename,'rb');//   只读形式打开文件
     $nr= fread($fp,filesize($filename)); 
     $nr=strtr($nr,$replacenums);
     //$nr=iconv("UTF-8","gbk",$nr) ;
     //$nr=addslashes($nr);  
     fclose($fp);
    $sql="insert into testerjinzhi(nr,test)values('$nr','$id')";
    $msclass->execsql($sql,$htconn);
    }这样的话,就报错,插入不进去了msexec:[Microsoft][ODBC SQL Server Driver][SQL Server]字符串 '?' 后的引号不完整。
      

  5.   

    转义呀!
    $nr = str_replace("'", "''", $nr);
      

  6.   

    我把文件编码设置为gb2312的了<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />$sql="select id,pic from htsj_fj";
    $replacenums=array("'"=>"''");
    $rs=mysql_query($sql,$conn);///读取mysql 表中的图片
    while($arr=mysql_fetch_array($rs))
    {
    $id=$arr["id"];
    $pic=$arr["pic"];
    $filename="./htpicup/".$pic;///图片路径 ./htpicup/1234.jpg
     
     
     $fp=fopen($filename,'rb');//   只读形式打开文件
     $nr= fread($fp,filesize($filename));  
     $nr = str_replace("'", "''", $nr);  
     //$nr=addslashes($nr);  
     fclose($fp);
    $sql="insert into testerjinzhi(nr,test)values('$nr','$id')";
    execsql($sql,$htconn);///插入mssql2005表中
    }
    还是插入不进去,说是
    [Microsoft][ODBC SQL Server Driver][SQL Server]字符串 '?' 后的引号不完整。
    慴''!Y竑` 这样的地方有一些个。
      

  7.   

    我在网上搜索到别人的帖子
    说是发表于 2008-10-25 23:55:21 |只看该作者 说了半天.我给你的答复就是:
    不能用二进制直接写入MSSQL而且要用HEX写入,所以在前面加上0x 原帖地址:http://bbs.phpchina.com/thread-86521-1-1.html
    ------------------------------------------------我看别人帖子有这么说的,这个是什么意思 ?