PHP / MSSQL字符串到十六进制



尝试使它工作5个小时后,我决定寻求帮助。我的问题是PHP将不同的字符串转换为HEX与MSSQL。

字符串

€Quct

php

bin2hex($ data(//C491C5BEC487C48DC5A1C491C491

MSSQL

cast('魏切克'作为varbinary(//f09ee6e89af0f0

PHP结果需要为MSSQL。我该如何解决解决问题?

编辑1

几乎使它正常工作,但仍然有2个char是错误的

$unpacked = unpack('H*hex', mb_convert_encoding($data,'ISO-8859-2')); // F0BEE6E8B9F0F0

尝试完成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 . '))';
}

如果您需要将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,这也应该给您一个一般的想法。

最新更新