我遇到了一个奇怪的问题并遇到了障碍。
背景
我正在使用MSSQL数据库。
我查询的表格有一个" TIMESTAMP "字段。
问题:
当我尝试输出从此列检索到的数据时,我得到了奇怪的输出。
例如,假设我在字段中保存了以下数据: 0x000000000ADDAB2F
PHP会将其输出为:
也许它正在发生,因为PHP正在尝试将此字符串转换为数字或其他内容。
我想要做的是输出字符串" AS IS" (即我不想让PHP处理它,只输出原始数据)。
我无法找到阻止PHP处理此数据的解决方案。
我正在使用 mssql _ * 函数来查询数据。
我尝试了什么
由于我甚至不知道为什么会发生这种情况,我试图实现我在谷歌上找到的任何东西。到目前为止,我已尝试将数字转换回原始形式。
所以我使用了utf8_decode
,mb_encode_numericentity
,mb_decode_numericentity
,base_convert
,unpack
和dechex
他们都不做我想做的事。
如果您打算建议将TIMESTAMP值转换为NVARCHAR或SQL Query本身中的某些内容,请注意这是不可能的。
因为我正在创建一个简单的通用查询表单,用户将在textarea中键入MSSQL查询,并在浏览器中返回结果。
所以他可以输入SELECT * FROM table,他应该输出输出中的所有列。
因此无法在查询本身中解决问题,我必须在PHP本身中进行。
任何帮助?
答案 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);