2016-03-23 4 views
1

私は、の準備文を使ってmysqlにデータを保存するためにphpを使用しています。送信するデータはblobsで、これは暗号化されたテキストでAES-256で暗号化されているので、バイナリ形式で保存します。画像。私はPHPを使用してmysqlにBLOBデータを格納するために考え出したmysqliからsend-long-dataを使用する必要があります。どのように長いデータを分割し、PHP mysqlでチャンクとして送信するには?

それはイメージではありませんので、私はファイルではありませんBLOBデータを格納するための単一のチュートリアルを見つけることができなかった、と私はこだわっています。

私はチャンクに文字列を分割コードを用意しましたが、結果が不完全であるように見えるだけ最初のチャンクが、私はそれを正しく保管しないか、保存されていますか?私は問題がstr_split()のどこかにあると思います。もしあなたがコードを訂正できるなら、私は感謝します。また、チャンクサイズをphp.netからコピーしました。暗号データ​​が本当に大きいかもしれないという事実に基づいて、最高のパフォーマンスを得るためには、最適なサイズにする必要がありますか?

$stmt = $conn->prepare("INSERT INTO data_store (eid, ekey, ecipher) VALUES (?, ?, ?)"); 

//Initialise variables 
$eid = $postedID; 
$ekey = NULL; 
$ecipher = NULL; 

if($stmt->bind_param("sbb", $eid, $ekey, $ecipher)) { 

    // Send blobs 
    $ekey_chunks = str_split($postedKey, 8192); 
    foreach ($ekey_chunks as $chunk) { 
     $stmt->send_long_data(1, $chunk); 
    } 

    $ecipher_chunks = str_split($postedCipher, 8192); 
    foreach ($ecipher_chunks as $chunk) { 
     $stmt->send_long_data(2, $chunk); 
    } 

    $stmt->execute(); 
    $stmt->close(); 
} 

$conn->close(); 

答えて

0

それはイメージではありませんので、私はファイルではありませんBLOBデータを格納するための単一のチュートリアルを見つけることができなかった、と私はこだわっています。

画像はすべて同じバイナリデータです。だからあなたはチュートリアルを使うことができます。ちょうどそのチャンクのものを取り除くと、クエリ通常の方法を実行して、あなたのコードを修正する

$stmt->bind_param("ssb", $eid, $ekey, $ecipher); 
$stmt->execute(); 

YOUは

+0

が必要なすべてのコードがなぜPHPはそれをMySQLへ送信する前にデータをチャンクお勧めしないですか? –

+1

これは本当に助けにはならない、許可された最大パケットサイズとそのようなものについて何かがなければならない。 –

+1

何でも。あなたの唯一の問題は、画像がファイルではなく、今解決されているという独特の考えでした。上記のチュートリアルを進めることができます。 –

関連する問題