2016-05-10 10 views
-1

私はファントムを利用して画像をキャプチャし、集中型MySQL DBにアップロードしています。PDOブロブが欠けているデータを挿入する

私が実行している問題は、一貫して試してみるすべてのファイルの終わりを切っていることです。 .pdf、.png、.docx、.xlsx ...ファイルの一部を切り捨てるので、破損することはありません。奇妙なことは、常に各ファイルから同じ量をカットすることです。

マイSQL挿入コードは次のとおりです。

$put_linkdata = $DBW->prepare('INSERT `'.$tableD.'` SET 
        captured = :capture_time, 
        error = :eYN, 
        link = :link, 
        image = :image, 
        html = :html, 
        `text` = :plaintext, 
        file = :file, 
        mimetype = :mimetype'); 

       $put_linkdata->bindValue(':capture_time', date('Y-m-d H:i:s',$record['timestamp'])); 
       $put_linkdata->bindValue(':link', $item['url']); 
       $put_linkdata->bindValue(':mimetype', $record['mimetype']); 
       $put_linkdata->bindParam(':eYN', $record['error'], PDO::PARAM_STR); 
       $put_linkdata->bindParam(':image', $record_child['image'], PDO::PARAM_LOB); 
       $put_linkdata->bindParam(':plaintext', $record_child['text'], PDO::PARAM_LOB); 
       $put_linkdata->bindParam(':html', $record_child['html'], PDO::PARAM_LOB); 
       $put_linkdata->bindParam(':file', $record_child['file'], PDO::PARAM_LOB); 

       if($put_linkdata->execute()){ 
        $linkData_record['id'] = $DBW->lastInsertId(); 
        print PHP_EOL.mb_strlen($record_child['image'], '8bit'); 
        print PHP_EOL.PHP_EOL.'~~~~~~~~~~~~~~~~~~~~~~~~~~~'.PHP_EOL.PHP_EOL; 
        die(); 
       } 
       else{ 
        throw New Exception('Error inserting linkdata record into archive - SQL error "'.$put_linkdata->queryString.'"'.PHP_EOL.PHP_EOL.$put_linkdata->errorInfo()); 
       } 

が、私はまだ整合性を維持し、データをここでする前にテストのトン、すべてを実行した場合、およびIますfile_put_contents()それが撮影された画像やファイルと同じです。

イメージの例では、google.comを使用すると私に25Kイメージが表示されますが、アップロードは17.2Kです。 55Kのpdfが40.7Kでアップロードされています。別のpdfは1.5 MBですが、1.1 MBでアップロードします。ファイルをdb blobと比較すると、DBのblobにはファイルの最後にコンテンツがありません。

サイズと内容がファイル間で一貫していませんが、同一のキャプチャで一貫しています。

誰もが考えている?

更新 私は準備された声明とアップロードの間で何か起こったことを絞り込んだ。

また、プリペアドステートメントを使用している場合、PDOとMySQLIの両方で発生します。最初の前提は、どこかでエンコードされた文字セットが間違っていることですが、すべてがUTF8(db、table、PDO接続、設定ファイル)として定義されています。

+0

私の推測では、BLOBはデータを保持するのに十分ではありません。 MEDIUMBLOBまたはLONG​​BLOBのいずれかを試してください。私は以前これに似た質問に答えました。列のタイプが小さすぎます。 –

+0

実際にはLONG​​BLOB列ですが、私はMEDIUMとBLOBに変更して、PDOとBLOBのサイズと関係があるかどうかを調べてみました。 変更は機能していません。また、BLOBであっても、25Kはまだその範囲内です。 – Lilbnyfufu

+0

blobのアップロードが終了する前に、スクリプトのタイムアウトが発生していますか? – Mazodude

答えて

0

問題を見つける、このポストは今むしろ愚かなようだが、包み誰もが将来的にこの問題に実行されます...

それが正しく表示またはダウンロードしませんPHPMyAdminの旧バージョンとの誤差がありますBLOB列のデータ

+0

あなたの答えを共有してくれてありがとうlilbnyfufu。私は過去に同様の問題に遭遇しました。それ以来、私はBlobの使用をやめました。代わりに、私は自分のファイルをフォルダにアップロードし、データベースにファイル名またはURLを保存するだけです。私がデータベースを知っているそのようにも、値も速く戻ります。 – CyberFla

関連する問題