2011-12-19 65 views
11

64エンコードアップロードファイルをベースにして、これをMySQLデータベースのテーブルのBLOBタイプのカラムに保存します。Base64はアップロードされたファイルをエンコードしてデータベースに保存します

私はPHP関数base64_encodeをfile変数でビルドしようとしましたが、これはうまくいかないようです。

これを行う方法はありますか?

なぜなら、moveuploadedファイルをフォルダに使用したくないからです。

ありがとうございます。

+1

ファイルをblobに格納する前にbase64_encodeする必要はありません。 – Sjoerd

+0

どのようにテーブルに保存しますか? –

+1

ファイルデータをBLOBフィールドに挿入するだけです。 – Arfeen

答えて

19

@Sjoerdと@zerkmsは、これを行う必要はありません.Blobカラムを使用して生のバイナリデータを保存するので、Base64プロセスをバイパスしてファイルの生データを挿入できます。

イメージをデータベースに保存したい場合(個人的にはやりたくない)、生データを保存する方がいいです - データをエンコードするBase64はそれを大きくしますイメージがレンダリングされる前にデコードされなければならず、これは処理オーバーヘッドを追加する。

これは、あなたが(MySQL拡張を想定して)生のバイナリデータを挿入する方法である。

$data = file_get_contents($_FILES['name_of_control']['tmp_name']); 
$data = mysql_real_escape_string($data); 

$query = " 
    INSERT INTO table 
    (`blob_column`) 
    VALUES 
    ('$data') 
"; 

mysql_query($query); 

あなたが本当にのBase64にしたいならば(これは単なるvarchar型に格納することができた場合には)それをエンコードコールを追加するだけです。

$data = file_get_contents($_FILES['name_of_control']['tmp_name']); 
$data = base64_encode($data); 

// There is an argument that this is unnecessary with base64 encoded data, but 
// better safe than sorry :) 
$data = mysql_real_escape_string($data); 

$query = " 
    INSERT INTO table 
    (`varchar_column`) 
    VALUES 
    ('$data') 
"; 

mysql_query($query); 
+0

Daveさん - 生のバイナリデータをbase64_encodeを使わずにBLOBフィールドに直接格納できると言っています。しかし、これは注射の影響を受けにくいのですか?また、mysql_real_escape_stringを使用すると、PDFなどの一般的なファイルタイプが(不可逆的に)破損しているようです。これまでのところ、base64_encodeはファイルをエスケープして正確な内容を保存する唯一の方法です... –

+0

to @TopherHunt:準備済みの文を使用します。すべてが安全です! – JDuarteDJ

関連する問題