SQL ServerとPHPでデータベースに画像を記録する

私の問題はありますか?

私はこの方法でデータベースに記録された写真を持っています:

UPDATE myTable 
SET pictureData = (SELECT * FROM OPENROWSET(BULK 'myFileAdress.jpeg', SINGLE_BLOB)AS x ) 
WHERE …

私は次のようにこのデータを読んでいます:

$myData = $myConnection->query('Select pictureData from myTable where …');
$row = $myData->fetch(PDO::FETCH_ASSOC);
echo @pack('H*', $row['pictureData'])

別の手で私は次のようにPHPスクリプトからこの画像ファイルを直接読み込みます:

$data = fopen ($myPictureAdress, 'rb');
$size = filesize ($picture);
echo fread ($data, $size);

実際には、いくつかのオクテット( '0')が(データベースからの)最初のメソッドで配置され、下に示すように私の画像が壊れます。

このオクテットがなぜそこに置かれるのか誰も知っていますか?挿入クエリは正しく行われていますか?

あなたの助けをありがとう!

システムインフォメーション:

  • SQL Server 2005
  • PHP
  • IIS

良い:

000000D0   38 00 42 00 63 00 63 00  63 00 63 00 63 00 63 00   8 B c c c c c c <-- no error
000000E0   63 00 63 00 63 00 63 00  63 00 63 00 63 00 63 00   c c c c c c c c 
000000F0   63 00 63 00 63 00 63 00  63 00 63 00 63 00 63 00   c c c c c c c c 
00000100   63 00 63 00 63 00 63 00  63 00 63 00 63 00 63 00   c c c c c c c c 

悪い:

00000100   63 00 63 00 63 00 63 00  63 00 06 00 36 00 36 00   c c c c c   6 6 <-- error
00000110   36 00 36 00 36 00 36 00  36 00 36 00 36 00 36 00   6 6 6 6 6 6 6 6 
00000120   36 00 36 00 36 00 36 00  36 00 36 00 36 00 36 00   6 6 6 6 6 6 6 6 
1
私はSQLにデータを挿入する方法に慣れていません。しかし、このエントリでいくつかのヒントやリンクを見つけることができます:> stackoverflow.com/questions/6106470/…
追加された 著者 rokdd,

1 答え

IバイナリデータのHex値をデータベースに格納します。一度私はそれを読むと、16進数を読み取り、バイナリに変換します。

 public byte[] StringToByteArray(string hex)
 {
 return Enumerable.Range(0, hex.Length)
                         .Where(x => x % 2 == 0)
                         .Select(x => Convert.ToByte(hex.Substring(x, 2),16))
                         .ToArray();
    }
0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com