【问题标题】:PHP sqlsrv insert/read blob (varbinary) field from database examplePHP sqlsrv 从数据库示例中插入/读取 blob (varbinary) 字段
【发布时间】:2017-05-28 15:46:49
【问题描述】:

我会将这个示例发布给任何需要帮助的人,将文件插入到 sqlsrv DB 中的 varbinary(max) 字段。 此外,如果您需要从 varbinary 字段中读取,您可以查看我是如何做到的。 此代码有效,但欢迎您的所有 cmets 和建议。 这是示例表:

CREATE TABLE [dbo].[files]
(
[id] [int] NOT NULL IDENTITY(1, 1),
[content] [varbinary] (max) NULL,
[filename] [varchar] (max) COLLATE Croatian_CI_AS NULL
)

首先输入您使用的服务器的数据。 如果需要在 db 的 varbinary 字段中插入文件:

<?php
$server = "";
$konekcionistring = array( "Database"=>"", "UID"=>"", "PWD"=>"");
$konekcija = sqlsrv_connect( $server, $konekcionistring);

$newfileName = 'testX.pdf';
$newtmpName  = 'C:\xampp\htdocs\testX.pdf';

$fp = fopen($newtmpName, 'rb');
$file_content = fread($fp, filesize($newtmpName));
fclose($fp);

$sql = "INSERT INTO files ([content],[filename]) SELECT CONVERT(VARBINARY(MAX),?),?";

$parametri = array(
                array($file_content),
                array($newfileName)
                );
$r_blob = sqlsrv_query($konekcija, $sql, $parametri);

if( $r_blob === false) 
    {
      die( print_r( sqlsrv_errors(), true) );
    }
?>

当您需要从 DB 中的 varbinary 文件中读取数据时,您可以使用以下代码:

<?php
$server = "";
$konekcionistring = array( "Database"=>"", "UID"=>"", "PWD"=>"");
$konekcija = sqlsrv_connect( $server, $konekcionistring);

$skript = "SELECT F.content, F.filename AS Template FROM dbo.files AS F";

$izvrsiSQL = sqlsrv_query($konekcija, $skript);
$result = sqlsrv_fetch_array($izvrsiSQL, SQLSRV_FETCH_ASSOC);
$filename = $result['filename'];
$X = $result['content'];


header("Content-type:application/pdf");
header('Content-Disposition: attachment inline; filename="'.$filename.'"');
echo $X;
?>

如果您有任何意见或建议,欢迎您。

【问题讨论】:

  • 太棒了!但是你有问题吗? (可以考虑改用文档stackoverflow.com/tour/documentation
  • 不,我没有任何问题。这是适用于需要 php-sqlsrv-varbinary 帮助的任何人的示例。此外,如果有人对我的代码有任何 cmets 或建议,那对我们所有人都有好处。附言我不知道 stackoverflow 和文档。我会在那里发布。
  • 除了在服务器端从 string/varchar 转换为 varbinary,您还可以将参数配置为 varbinary,如下所示:$parameters = [[$file_content, SQLSRV_PARAM_IN, SQLSRV_SQLTYPE_VARBINARY($size), SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY)], ...];

标签: php blob varbinary


【解决方案1】:

如果你想压缩和上传

function compressImage($filename){

    $details = getimagesize($filename);
    $content = file_get_contents($filename);
    $srcImg = imagecreatefromstring($content);

    
    //get content
    ob_start();
    imagejpeg($srcImg, null,10);
    $contents = ob_get_contents();
    ob_end_clean(); 

    imagedestroy($srcImg);
    return $contents;
}


            $CompressedImage = compressImage($FileTempName);

            $status = sqlsrv_query($conn,'insert into Post (P_image) values (?)', array(  
            array($CompressedImage, SQLSRV_PARAM_IN,SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY), SQLSRV_SQLTYPE_VARBINARY('max'))
            ));

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2012-10-19
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多