ホームページ  >  記事  >  バックエンド開発  >  PHP が画像を mysql データベースに保存できない場合の解決策、_PHP チュートリアル

PHP が画像を mysql データベースに保存できない場合の解決策、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:10:46858ブラウズ

PHP が画像を mysql データベースに保存できない問題の解決策、

この記事の例では、PHP が画像を MySQL データベースに保存できない場合の解決策を分析します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

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

コードをコピーします コードは次のとおりです:
'class/db.php' が必要です
; $ファイル名 = "a1.jpg"; $fp = fopen($ファイル名, "r"); $img = fread($fp, ファイルサイズ($ファイル名)); fclose($fp);
$db->e​​xecute("db2.testimg (`img`) 値を挿入 ('$img') ;");


エラー報告:


SQL 構文にエラーがあります。'`?绶q?仳!??? ,Mo ?'^ W 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 Z4in??T春??????U?湹? 1行目 コードは次のとおりです:

コードをコピーします


コードは次のとおりです:

$img = fread($fp, filesize($fileName)); $img = まつげを追加($img)
エラーを報告し続ける、あらゆる種類の検索、Baidu の結果がすべてアッドスラッシュであるか、アッドスラッシュがまったくない、それは本当にナンセンスです。

コードをコピーします


コードは次のとおりです:

base64_decode $img = Base64_encode($img);
挿入は成功しました。画像ファイルは 17.0k です。出てきて、base64_decode を実行します。表示は正常です。16 進数のメソッドが見つかりました:

コードをコピーします


コードは次のとおりです:

$img = bin2hex($img); これは効果的で、出力を復号化する必要がなく、データベースは非常に大きく、base64 よりもさらに悪い 25K ですが、後で、phpmyadmin によって直接アップロードされた画像ファイルが可能であることがわかりました。ファイルはbase64より小さく、12.8kです
phpmyadmin ソースコードを見ると、common.lib.php ファイル 183 には魔法のような機能があり、コードは次のとおりです。

コードをコピーします

コードは次のとおりです:

function 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 の例、コードは次のとおりです:



コードをコピーします

コードは次のとおりです:


写真をアップロード
<フォームメソッド="post" アクション="upimage.php" enctype="multipart/form-data"> ファイル:
バックグラウンド処理の 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"); エコー $row->image mysql_close(); ?>
結論:


PMA_sqlAddslashes は使いやすいです。ファイルサイズは 12.8k で、元の画像と同じくらいの大きさです

bin2hex 16 進数の便利なファイル 25K

base64_encode は使いやすく、出力ファイルには Base64_decode 17K が必要です

addslashes は使いにくいです。引き続きエラーを報告し、一部の Windows マシンでは addslashes が使いやすいことを示してください。
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

http://www.bkjia.com/PHPjc/933596.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/933596.html

技術記事

PHP が MySQL データベースに画像を保存できない場合の解決策 この記事では、PHP が MySQL データベースに画像を保存できない場合の解決策を分析します。参考のためにみんなで共有してください。具体的なポイント...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。