PHP输出十六进制字符串"原样"

时间:2017-02-08 15:21:03

标签: php sql-server

我遇到了一个奇怪的问题并遇到了障碍。

背景

我正在使用MSSQL数据库。

我查询的表格有一个" TIMESTAMP "字段。

问题:

当我尝试输出从此列检索到的数据时,我得到了奇怪的输出。

例如,假设我在字段中保存了以下数据: 0x000000000ADDAB2F

PHP会将其输出为:

也许它正在发生,因为PHP正在尝试将此字符串转换为数字或其他内容。

我想要做的是输出字符串" AS IS" (即我不想让PHP处理它,只输出原始数据)。

我无法找到阻止PHP处理此数据的解决方案。

我正在使用 mssql _ * 函数来查询数据。

我尝试了什么

由于我甚至不知道为什么会发生这种情况,我试图实现我在谷歌上找到的任何东西。到目前为止,我已尝试将数字转换回原始形式。

所以我使用了utf8_decodemb_encode_numericentitymb_decode_numericentitybase_convertunpackdechex

他们都不做我想做的事。

如果您打算建议将TIMESTAMP值转换为NVARCHAR或SQL Query本身中的某些内容,请注意这是不可能的。

因为我正在创建一个简单的通用查询表单,用户将在textarea中键入MSSQL查询,并在浏览器中返回结果。

所以他可以输入SELECT * FROM table,他应该输出输出中的所有列。

因此无法在查询本身中解决问题,我必须在PHP本身中进行。

任何帮助?

3 个答案:

答案 0 :(得分:2)

使用bin2hex。 PHP打印的是实际的二进制值。您看到的0x ....是二进制数据的十六进制表示。

答案 1 :(得分:2)

SQLServer TIMESTAMP值是一个数字,但由于某种原因,PHP将其存储为字符串。字符串只是一个字节序列。当这些字节被解释为字符时,其中一些字符可能无法打印。

有几种方法可以转换你可以进一步使用的字节序列(用于打印,计算等)。

如果您需要将值作为数字,则可以使用unpack()

假设您从数据库获得的原始值存储在$rawData变量中,以下代码应显示0x000000000ADDAB2F

$values = unpack('J', $rawData);
printf('0x%016X', $value[1]);

答案 2 :(得分:0)

如果要打印/显示变量的任何十六进制值,可以使用以下代码:

$hex_value=0x000000000ADDAB2F;
echo sprintf("0x%'016X", $hex_value);