PHP が画像を mysql データベースに保存できない問題の解決策、
この記事の例では、PHP が画像を MySQL データベースに保存できない場合の解決策を分析します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
画像をデータベースに保存するのは賢明な考えではありません。ほとんどの人は画像をサーバーに保存し、画像アドレスをデータベースに保存します。この方法では、表示するたびに画像アドレスを読み取るだけで済みます。ただし、mysql データベースへの保存の問題の解決策を以下に示します。コードは次のとおりです。
コードをコピーします コードは次のとおりです:
'class/db.php' が必要です
;
$ファイル名 = "a1.jpg";
$fp = fopen($ファイル名, "r");
$img = fread($fp, ファイルサイズ($ファイル名));
fclose($fp);
$db->execute("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
true
http://www.bkjia.com/PHPjc/933596.html
技術記事
PHP が MySQL データベースに画像を保存できない場合の解決策 この記事では、PHP が MySQL データベースに画像を保存できない場合の解決策を分析します。参考のためにみんなで共有してください。具体的なポイント...