PHP ピクチャを MySQL データベースに保存できない場合の解決策_PHP チュートリアル

WBOY
リリース: 2016-07-13 17:06:33
オリジナル
1030 人が閲覧しました

画像をデータベースに保存するのは賢明な考えではありません。ほとんどの人は画像をサーバーに保存し、画像アドレスをデータベースに保存します。この方法では、表示するたびに画像アドレスを読み取るだけで済みます。ただし、mysql データベースに保存する場合の解決策を以下に示します。

コードは次のとおりです コードをコピー

「class/db.php」が必要;
$fileName = "a1.jpg";
$fp = fopen($fileName, "r");

$img = fread($fp, ファイルサイズ($ファイル名));
fclose($fp);

$db->e​​xecute("db2.testimg (`img`) 値を挿入 ('$img') ;");

エラーを報告する
SQL 構文にエラーがあります。「`?绶q?仳!??? ?1丶> ,Mo?」付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 ?T春??????U?湹? 1行目

コードは次のとおりです コードをコピー

$img = fread($fp, ファイルサイズ($ファイル名));
$img = ラッシュを追加($img)

引き続きエラーを報告してください

さまざまな検索、Baidu の結果はすべて addslashes であるか、addslashes さえ利用できません。なんてナンセンス

base64_デコード

$img = Base64_encode($img);
挿入に成功しました。画像ファイル 17.0k

出てきてbase64_decodeを実行すると、表示は正常です

16進法を見つける
$img = bin2hex($img);
実際には、出力を復号化する必要はありません。保存されるデータベースのサイズは 25K です。これは、base64 よりもさらに欺瞞的です。

もう一度探してください。

後で、後で。 phpmyadmin によって直接アップロードされた画像ファイルは、base64 よりも小さい可能性があることがわかりました。ファイル 12.8k

phpmyadminのソースコードをひっくり返す
Common.lib.php ファイル 183 には魔法の機能があります

コードは次のとおりです コードをコピー

関数 PMA_sqlAddslashes($a_string = '', $is_like = false, $crlf = false, $php_code = false)
{
If ($is_like) {
$a_string = str_replace('', '\\', $a_string);
} その他 {
$a_string = str_replace('', '\', $a_string);
}

If ($crlf) {
$a_string = str_replace("n", 'n', $a_string);
$a_string = str_replace("r", 'r', $a_string);
$a_string = str_replace("t", 't', $a_string);
}

If ($php_code) {
$a_string = str_replace(''', '', $a_string);
} その他 {
$a_string = str_replace(''', '''', $a_string);
}

$a_string を返します;
} // 'PMA_sqlAddslashes()' 関数の終わり $img = PMA_sqlAddslashes($img);

ファイルサイズは12.8Kで、phpmyadminと同じサイズです。

フロントデスク (image.html):

コードは次のとおりです コードをコピー


<頭>
写真をアップロード





ファイル:



バックグラウンド処理 (upimage.php):

コードは次のとおりです コードをコピー

//データベースに写真を挿入します
$imgfile=$_FILES['imgfile'];
$submitbtn=$_POST['submitbtn'];
if($submitbtn=='OK' and is_array($imgfile)){
$name=$imgfile['name'] //画像名を取得します
$type=$imgfile['type'] //画像の種類を取得します
$size=$imgfile['size'] //画像の長さを取得します
$tmpfile=$imgfile['tmp_name']; //画像がアップロードされる一時ファイルへのパス
if($tmpfile and is_uploaded_file($tmpfile)){ //アップロードされたファイルが空かどうか、またそのファイルがアップロードされたファイルであるかどうかを判断します
//画像ストリームを読み込む
$file=fopen($tmpfile,"rb");
$imgdata=bin2hex(fread($file,$size)); //bin2hex() はバイナリデータを 16 進数表現に変換します
fclose($file);

$mysqli=mysql_connect("localhost","root","123456″); //データベース接続関数
mysql_select_db("test"); //データベースを選択します
//データベースステートメントを挿入し、16 進数を表すために使用される画像データの前に 0x を追加します
if(mysql_query("画像(名前,タイプ,画像)に挿入 値('".$name."','".$type."',0x".$imgdata.")"))
echo "

正常に挿入されました!

画像を表示
";
それ以外
echo "
挿入に失敗しました!
";
mysql_close();
}その他
echo "
最初に画像を選択してください!

ここをクリックして戻る
";

echo "
最初に画像を選択してください!

ここをクリックして戻る
";
?>

表示画像(disimage.php):

コードは次のとおりです コードをコピー

mysql_connect("localhost","root","123456″);
mysql_select_db("テスト");
//最後に挿入された画像を表示します
$result=mysql_query("id=(画像から最大(id)を選択)の画像から画像を選択");
$row=mysql_fetch_object($result);
header("Content-Type:image/pjpeg");
echo $row->image;
mysql_close();
?>


結論

PMA_sqlAddslashes は使いやすいです。ファイルサイズは 12.8k で、元の画像と同じくらいの大きさです
bin2hex 16 進数の便利なファイル 25K
Base64_encode は使いやすく、出力ファイルには Base64_decode 17K が必要です
addslashes は使いにくいので、引き続きエラーを報告してください (注: addslashes は一部の Windows マシンで簡単に使用できます)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/630680.html技術記事画像をデータベースに保存するのは賢明な方法ではありません。ほとんどの人は画像をサーバーに保存し、画像アドレスをデータベースに保存するので、毎回画像アドレスを読み取るだけで済みます...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート