【问题标题】:Php with MSSQL display raw data from varbinary field带有 MSSQL 的 PHP 显示来自 varbinary 字段的原始数据
【发布时间】:2012-02-02 16:04:09
【问题描述】:

我正在尝试在 php 中显示来自 SQL Server 中的 varbinary 字段的原始数据。我想准确地返回我在 SQL Server 中的内容(0x00000 等),但它似乎正在进行某种转换并返回给我类似 )T¡òaýCž«V°Ø'©O

希望这对某人有意义。

谢谢

【问题讨论】:

  • 你在看什么输出?是否要以十六进制格式显示?

标签: php sql-server varbinary


【解决方案1】:

打印出来的数据在浏览器中输出时总是被解释为字符数据。如果您想要精确的 HEX 或 BIN 数据表示,则需要在选择数据时使用:HEX()

SELECT HEX(mydata) as hexdata FROM mytable ...

当你输出它时,它现在将是一串十六进制字符。我认为二进制格式有一个等价物,它会输出 0 和 1,但我不确定......

如果您无法在 mysql 级别转换数据(可能有很多原因),那么您可以使用 PHP 等效的 bin2hex:

echo bin2hex($mydata['mybinarydata'];

bin2hex 的文档可以在以下位置找到:http://www.php.net/bin2hex

祝你好运

【讨论】:

  • 我想再详细一点,我有图像(物理图像)保存为此 varbinary 字段 .jpg 所以图像服务器上的图像是 0x0123etc.jpg 我需要使用来自服务器的数据以查找文件名。
【解决方案2】:

避免sql注入和utf8转换错误的更安全的解决方案:

public function setFileContentAttribute($value)
    {
        if ('sqlsrv' === config('database.default')) { // todo or some other way to check if its sql server connection
            return $this->attributes['file_content'] = DB::raw('CONVERT(VARBINARY(MAX), 0x' . bin2hex($value) . ')');
        }
        return $this->attributes['file_content'] = $value;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2017-01-18
    • 2014-09-08
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多