我试图在php中的SQL server中的varbinary字段中显示原始数据。我想准确地返回我在SQL Server中的内容(0x00000etc。),但它似乎正在进行某种转换并返回给我一些类似的东西,例如,T?òaýCž«V°Ø'©O
希望这对某人有意义。
谢谢
答案 0 :(得分:3)
打印出的数据在浏览器中输出时始终被解释为字符数据。如果您需要精确的HEX或BIN数据表示,则需要在使用以下方法选择数据时进行转换:HEX()
SELECT HEX(mydata) as hexdata FROM mytable ...
当你输出它时,它现在将是一串HEX字符。我认为有一个等价的二进制格式输出0和1但我不确定...
如果你无法在mysql级别转换数据(可能有很多原因)那么你可以使用PHP等价的bin2hex:
echo bin2hex($mydata['mybinarydata'];
bin2hex的文档可在以下位置找到:http://www.php.net/bin2hex
祝你好运答案 1 :(得分:0)
避免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;
}