【问题标题】:Storing pdf to varbinary(max) field with php and MS SQL使用 php 和 MS SQL 将 pdf 存储到 varbinary(max) 字段
【发布时间】:2014-06-03 20:45:04
【问题描述】:

我正在使用 MS SQL 2005 和 PHP,我得到了这个代码

move_uploaded_file($_FILES["file"]["tmp_name"],"temp/" . $_FILES["file"]["name"]);
$data = fopen("temp/"$_FILES["file"]["name"], "rb");
$content =fread($data,$_FILES['file']['size']);
$content=addslashes($content);
$sql = "INSERT INTO docs(file) value($content)";
if(!mssql_query($sql)){
    die('MSSQL error: ' . mssql_get_last_message());
}

我得到了这个错误:MSSQL 错误:'PDF' 附近的语法不正确

PD:原谅我的英语不好


我找到了解决方案:代码如下所示:

function mssql_escape($data) {
    if(is_numeric($data))
      return $data;
    $unpacked = unpack('H*hex', $data);
    return '0x' . $unpacked['hex'];
}

-

move_uploaded_file($_FILES["file"]["tmp_name"],"temp/" . $_FILES["file"]["name"]);
$data = fopen("temp/"$_FILES["file"]["name"], "rb");
$content =fread($data,$_FILES['file']['size']);
$content=mssql_escape($content);//Call mssql_escape function
$sql = "INSERT INTO docs(file) value($content)";
if(!mssql_query($sql)){
    die('MSSQL error: ' . mssql_get_last_message());
}

【问题讨论】:

    标签: php sql-server file storage varbinarymax


    【解决方案1】:

    使用参数。有关如何执行此操作的说明,请参阅文档 - 特别是 the first example for mssql_bind

    您正在尝试将 PDF 文件的内容作为字符串插入,并且该字符串周围没有引号。但即使您将$contents 括在引号中,它也可能仍然无法正常工作。文件内容中可能存在二进制文件,根本无法以这种方式插入。

    另外,将 PDF 文件保存在文件系统中的某个位置并将文件的路径保存在数据库中可能会更容易。这样一来,您的数据库中就不会有大量(兆字节!)记录,并且文件可能会更快地访问。

    【讨论】:

      【解决方案2】:

      我找到了解决方案:代码如下所示:

      function mssql_escape($data) {
          if(is_numeric($data))
            return $data;
          $unpacked = unpack('H*hex', $data);
          return '0x' . $unpacked['hex'];
      }
      

      -

      move_uploaded_file($_FILES["file"]["tmp_name"],"temp/" . $_FILES["file"]["name"]);
      $data = fopen("temp/"$_FILES["file"]["name"], "rb");
      $content =fread($data,$_FILES['file']['size']);
      $content=mssql_escape($content);//Call mssql_escape function
      $sql = "INSERT INTO docs(file) value($content)";
      if(!mssql_query($sql)){
          die('MSSQL error: ' . mssql_get_last_message());
      }
      

      【讨论】:

        猜你喜欢
        • 2012-04-26
        • 1970-01-01
        • 2018-05-11
        • 2011-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多