带有MSSQL的Php显示varbinary字段中的原始数据


Php with MSSQL display raw data from varbinary field

我正试图在php中显示SQL server中varbinary字段的原始数据。我想准确地返回我在SQL Server中的内容(0x00000等),但它似乎在进行某种转换,并返回给我类似于)TàaýCž

希望这对某些人来说是有意义的。

感谢

在浏览器中输出时,打印出的数据始终被解释为字符数据。如果您想要确切的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

祝好运

避免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;
    }