CREATE PROCEDURE sp_table1 @pics image
AS
...
再用
mssql_bind($stmt, "@pics", $EmpPhoto, SQLVARCHAR, true);
mssql_execute($stmt, false);
试一试

解决方案 »

  1.   

    这些都试过了不行哦,无意间在php带注释的手册中看到一个例子,有讲解决办法<?php
    if ($_FILES["FileUpload1"] != null) {    $db = mssql_connect("127.0.0.1", "sa", "liuyang");
        mssql_select_db("test", $db);    // storing a file
        $filename = $_FILES["FileUpload1"]["name"];
        //$datastring = file_get_contents($_FILES["FileUpload1"]["tmp_name"]);
        $datastring = implode('', file ($_FILES["FileUpload1"]["tmp_name"]));
        $data = unpack("H*hex", $datastring);
        $EmpPhoto = "0x".$data['hex'];    mssql_query("INSERT INTO Table1(pics) VALUES(".$EmpPhoto.")");
        mssql_close($db);    print("图片插入成功!<br>\n");
        exit();    /*
        // 读取查看
        $result = mssql_query("select pics from Table1 where id=1");
        $row = mssql_fetch_assoc($result);
        header("Content-type: image/bmp;");
        echo $row['pics'];
        */
    }
    ?>这段代码可以正常插入和读取显示了。
      

  2.   

    关键在于
    $datastring=implode('',file($_FILES["FileUpload1"]["tmp_name"]));
    $dat=unpack("H*hex",$datastring);
    $EmpPhoto="0x".$data['hex'];
    这三句吗?
      

  3.   

    嗯,是的。
    我认为关键是读取图片内容数据转换的问题,如果不这样转用mssql_query执行sql语句会报错
      

  4.   

    也对我看上面那个存储过程的调用应该没什么错
    呵呵 Mark :)
      

  5.   

    是啊,储存过程应该没什么问题
    但不是不明白就算用
    $datastring=implode('',file($_FILES["FileUpload1"]["tmp_name"])); 
    $dat=unpack("H*hex",$datastring); 
    $EmpPhoto="0x".$data['hex']; 
    转换了数据,在去调用存储过程还是会出错哦。
      

  6.   

    要不你就用 mssql_query 得了 还简单:)
      

  7.   

    up
    查查fread 和file函数的区别
    二进制文件要用字节涵数和数组,
      

  8.   

    手册上写:
    在操作二进制文件时如果没有指定 'b' 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。 注: 为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 'b' 标记。 
      

  9.   

    求将一个图片上传到数据库,然后从数据库中读出显示到页面上的代码  邮箱:[email protected]  感激不尽