代码之家  ›  专栏  ›  技术社区  ›  Flegy

PHP/MSSQL字符串到十六进制

  •  1
  • Flegy  · 技术社区  · 7 年前

    经过5个小时的努力,我决定寻求帮助。我的问题是PHP将与MSSQL不同的字符串转换为十六进制。

    字符串

    Ää¾Ä‡ÄÄÄÄÄ

    PHP

    bin2hex($数据)//C491C5BEC487C48DC5A1C491C491

    MSSQL

    强制转换(“”为varbinary)//F09EE6E89AF0F0

    PHP结果需要与MSSQL相同。对于已解决的问题,我能做些什么?

    编辑1

    几乎可以正常工作了,但仍有2个字符错误

    $unpacked = unpack('H*hex', mb_convert_encoding($data,'ISO-8859-2')); // F0BEE6E8B9F0F0
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Flegy    7 年前

    经过10个小时的努力,终于完成了!!如果某人有类似问题,则发布解决方案。

    public function FixCroatianChars($data)
    {
         $unpacked = unpack('H*hex', mb_convert_encoding($data, 'HTML-ENTITIES'));
         return 'CAST(0x' . $unpacked['hex'] . ' as char(' . strlen($unpacked['hex']) / 2 . '))';
    }
    
        2
  •  0
  •   Ctznkane525    7 年前

    如果需要将MSSQL转换为varbinary,我建议您这样做。

    以下是PDO示例:

    $conn = new PDO("sqlsrv:Server=$myServer;Database=$myDB", $myUser, $myPass);
    $stmt = $conn->prepare('SELECT CAST(? as varbinary)');
    $stmt->execute(array($lastname));
    $result = $stmt->fetchAll();
    foreach ($result as $row) 
    {
      // Note your result set will return example one row with one column in it
    }
    

    即使您没有使用PDO,这也应该给您一个大致的想法。