PHP MYSQL ファイルの内容エスケープの問題
-
13-09-2019 - |
質問
php を使用して .pdf ファイルを mysql データベースにアップロードしようとしています。
ファイルの内容以外は問題ありません。特殊文字をエスケープしようとしても、クエリは常に失敗し、ほとんどの場合は「不明なコマンド 」が発生します。
私はaddslashes、mysql_real_escape_string、removeslashesなどを使用しました。
ファイルの内容をエスケープする方法について何かアイデアを持っている人はいますか?
どうもありがとう、
解決
私は...うまく動作するように思われる、前に、次の手順を使用しました、そしてDBに任意のデータを格納する、画像、PDF、データの配列などを含む:)
データを格納する(文字列、アレイ、オブジェクトなどとすることができる。);
まず、base64でエンコードされた文字列にデータをオン
$strData = strtr(
base64_encode(
addslashes(
gzcompress( serialize($dataToStore) , 9)
)
) , '+/=', '-_,');
次にデシベルでその文字列データを保存...
<時間>データの取得
DBから文字列データを抽出します。
(あなたが入力データ、配列、画像などに応じて、この後の余分なステップを実行する必要があるかもしれません。)バック何をしたいのデータをデコード
$returnData = unserialize(
gzuncompress(
stripslashes(
base64_decode(
strtr($strDataFromDb, '-_,', '+/=')
)
)
)
);
これは確かに私は、MySQL DBに格納するのに必要なものを保存するために私を助けた!
他のヒント
なぜデータベースにファイルを保存したいのか分かりませんが、以下を参照することをお勧めします。 準備されたステートメント.
推測:あなたは文字セット間の非互換性に起因するエラーに遭遇することができます。あなたは、DBの列がそれを処理するように設定されていることを確認する必要がありますので、PDFは、おそらくバイナリファイルです。
(MySQL) システム変数が異なる場合、エスケープの問題に加えて、「パケットが大きすぎます」エラーが発生する可能性があります。 max_allowed_packet 「小さい」値に設定されます。
mysqli 拡張機能、プリペアドステートメントを使用し、 mysqli_stmt::send_long_data 両方の問題を回避できます。