2017-08-16 8 views
0

写真をFIREBIRDに追加することはできません。このようなコードblob image FIrebirdをPHPに追加するには?

 $imgSrc='Desert.jpg'; 
    $img_src = $imgSrc; 
    $imgbinary = fread(fopen($img_src, "r"), filesize($img_src)); 
    $img_str = base64_encode($imgbinary); 

    $blh = ibase_blob_create($this->db); 
    ibase_blob_add($blh, $img_str); 
    $blobid = ibase_blob_close($blh); 

    $row = false; 
    /*$fd = fopen('Desert.jpg', 'r'); 
    $blob = ibase_blob_import($fd); 
    fclose($fd); */ 
    $query = ibase_query($this->db, "INSERT INTO \"ud_ab\" (FILES) VALUES (?)", $img_str) or die(ibase_errmsg()); 
    if($query) $row = true; 
    return $row; 

を書くことは、 `、base64形式で画像を変換しようとしましたibase_blob_add.Nothingが

+1

の代わりに$ img_str'、 '$ blobid'(あるいは' $ blh')を 'ibase_query'に渡すべきだと思います。 blobはデフォルトでバイナリデータであるため、これをbase64でエンコードする必要はありません。私はPHPでプログラミングしていないことに注意してください。私はこの質問に基づいて推測しています:https://stackoverflow.com/questions/28801781/php-firebird-insert-blob-file-into-the-database-apache-突然停止する作業 –

答えて

1

を助け書いたこれは、画像を保存するためのサンプルコードですが、BLOBフィールド内

define('MAX_SEGMENT_SIZE', 65535); 

function blob_create($data) { 
    if (strlen($data) == 0) 
     return false; 
    $handle = ibase_blob_create(); 
    $len = strlen($data); 
    for ($pos = 0; $pos < $len; $pos += MAX_SEGMENT_SIZE) { 
     $buflen = ($pos + MAX_SEGMENT_SIZE > $len) ? ($len - $pos) : MAX_SEGMENT_SIZE; 
     $buf = substr($data, $pos, $buflen); 
     ibase_blob_add($handle, $buf); 
    } 
    return ibase_blob_close($handle); 
} 
$blob = blob_create(file_get_contents('Desert.jpg')); 
$query = ibase_query($this->db, "INSERT INTO \"ud_ab\" (FILES) VALUES (?)", $blob) or die(ibase_errmsg()); 
+0

Firebirdの一部のバージョンでは、最大セグメントサイズが64Kではなく32Kに制限されることがあります。 –

関連する問題