0

我正在使用 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());
}
4

2 回答 2

0

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

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());
}
于 2014-06-04T18:32:23.917 回答
0

使用参数。有关如何执行此操作的说明,请参阅文档 - 特别是 mssql_bind 的第一个示例。

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

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

于 2014-06-03T20:50:52.657 回答