PHP içine SQL Server İkili Görüntü Verilerini Okuma Yardım

1 Cevap php

Ben PHP içine SQL sunucusu ikili verileri okumak için bir yol anlamaya görünüyor olamaz. Ben dosya sisteminde, SQL tablosu doğrudan görüntüyü değil depolamak mümkün olması gereken bir proje üzerinde çalışıyorum.

Şu anda, ben bu gibi bir sorgu kullanarak edilmiştir:

INSERT INTO myTable(Document) SELECT * FROM OPENROWSET(BULK N'C:\image.jpg', SINGLE_BLOB) as BLAH

Bu aslında tabloya resim eklemek için çalışıyor, ama henüz bunu almak ve geri görüntü almak için bir yol düşündüm değil.

PHP ile bu yapıyorum, ve sonuçta bunun dışında bir saklı yordam yapmak zorunda olacak, ama herkes (varbinary(MAX)) bu ikili verileri almak için bir yol beni aydınlatmak ve anında bir görüntü oluşturabilir.

Ben bir SELECT deyimi kullanmak ve bir görüntü olduğunu belirtti başlıklarına bir içerik türü eklemek için basit olması bekleniyor, ama sadece çalışma değil. Bunun yerine, sayfa sadece ben geçmişte karşılaştığım dosyasının adını görüntüler ve görüntü verileri ile bir hata olduğunu anlayacaksınız.

EDIT: Ben bu çözdüm. Ben kırmak için dışarı test edildi görüntüleri neden bu kadar saklı yordam okurken SQL Server yalnızca 8000 bayt maksimum gönderdiğini biraz problem oldu.

$q = "Get_Picture_Test_SP @pk_rms_id=1443546";
$res = mssql_query($q);

$row = mssql_fetch_assoc($res);

$image = $row['picture'];

function hex2bin($h)
  {
  if (!is_string($h)) return null;
  $r='';
  for ($a=0; $a<strlen($h); $a+=2) { $r.=chr(hexdec($h{$a}.$h{($a+1)})); }
  return $r;
  }

$image = hex2bin($image);

header("Content-type: image/gif");

print $image;

exit; 
?>

Bu benim görüntüyü göstermek zorunda nasıl. Beni yanlış anlamaya izin altıgen ucu, söz için teşekkür ederiz.

1 Cevap

SQLSunucusu ile deneyim ama ben MySQL BLOB'ları ile işe yaramadı yok. İki seçeneğiniz var,

  1. SQL sorgusunda çalışır böylece ikili veri Escape. Veri eklenir ve stripslashes () önce geri geldiğinde () addslashes kullanarak bunu yapabilirsiniz.

  2. SQL sorgusu onaltılık sözdizimi kullanma.

Değil MySQL standart SQL ama eğer böyle altıgen şeklinde BLOB'u okuyabilir emin,

 select hex(image) from table;

Sen X'1234ABCD gibi SQL onaltılık 'olarak ikili veri yazabilirsiniz.

Kolayca dönüştürmek, böylece PHP hex2bin/bin2hex sağlar.