64エンコードアップロードファイルをベースにして、これをMySQLデータベースのテーブルのBLOBタイプのカラムに保存します。Base64はアップロードされたファイルをエンコードしてデータベースに保存します
私はPHP関数base64_encodeをfile変数でビルドしようとしましたが、これはうまくいかないようです。
これを行う方法はありますか?
なぜなら、moveuploadedファイルをフォルダに使用したくないからです。
ありがとうございます。
64エンコードアップロードファイルをベースにして、これをMySQLデータベースのテーブルのBLOBタイプのカラムに保存します。Base64はアップロードされたファイルをエンコードしてデータベースに保存します
私はPHP関数base64_encodeをfile変数でビルドしようとしましたが、これはうまくいかないようです。
これを行う方法はありますか?
なぜなら、moveuploadedファイルをフォルダに使用したくないからです。
ありがとうございます。
@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);
Daveさん - 生のバイナリデータをbase64_encodeを使わずにBLOBフィールドに直接格納できると言っています。しかし、これは注射の影響を受けにくいのですか?また、mysql_real_escape_stringを使用すると、PDFなどの一般的なファイルタイプが(不可逆的に)破損しているようです。これまでのところ、base64_encodeはファイルをエスケープして正確な内容を保存する唯一の方法です... –
to @TopherHunt:準備済みの文を使用します。すべてが安全です! – JDuarteDJ
ファイルをblobに格納する前にbase64_encodeする必要はありません。 – Sjoerd
どのようにテーブルに保存しますか? –
ファイルデータをBLOBフィールドに挿入するだけです。 – Arfeen