PHP sqlsrv 从数据库示例中插入/读取 blob(varbinary)字段

标签 php blob varbinary

我将为需要帮助将文件插入到 sqlsrv DB 中的 varbinary(max) 字段的任何人发布此示例。
此外,如果您需要从 varbinary 字段读取,您可以看到我是如何做到的。
此代码正在运行,但欢迎您提出所有意见和建议。
这是示例表:

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) );
    }
?>

当您需要从数据库中归档的 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;
?>

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

最佳答案

如果你想压缩和上传

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'))
            ));

关于PHP sqlsrv 从数据库示例中插入/读取 blob(varbinary)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41631765/

相关文章:

php - 添加 Materialize css 后尝试在 Yii2 上获取非对象错误的属性

react-native - react native 缺少 readAsArrayBuffer

android - 从 SQLite 数据库中获取 Blob

database - 将图像作为 varbinary (silverlight) 保存到数据库

php - 停止远程服务器 PHP 上的无限循环

php - 调用成员函数 bind_result() on a non-object in ... on line 17

php - Apache 节俭 : client timeout issues

git - 从 Git 恢复无法读取 blob,文件现在具有不同的哈希值?

sql-server - SQL Server 性能 : 50 columns vs single binary/varbinary

Mysql varbinary类型行和无效字符