画像関連

【PHP・MySQL】データベースに画像を保存・表示する方法 第3回「画像を保存する」

Sara

 
ここまでの記事はこちら

今回はデータベースに画像ファイルを保存していきます。

データベースを作成していない方はこちらから用意してください。

解説

functions.phpの作成

データベースへの接続は

  • 画像を保存する時
  • 画像を表示する時
  • 画像を削除する時

に必要になります。

何度も同じコードを書くのは面倒なので functions.php というファイルを作成して、データベース接続する関数を用意しましょう。

データベースに接続

functions.php を作成したら、以下のようにコードを書きます。

4行目

$param = 'mysql:dbname=my_image;host=localhost';

dbname はデータベース名、host はホスト名を設定します。

ローカル環境でのホスト名は localhost にします。レンタルサーバーなどを利用している場合はお使いのサーバーに合わせて変更してください。

6行目

$pdo = new PDO($param, 'ユーザー名', 'パスワード');

ユーザー名とパスワードは、ご自身の MySQL の設定に合わせて変更してください。phpMyAdmin 管理画面へのログインに使うユーザ名とパスワードです。

XAMPP / MAMP を使っている場合

ユーザー名とパスワードの初期設定を変更していない場合は以下の設定します。

XAMPPMAMP
ユーザー名rootroot
パスワードなし(空白)root

10行目

exit($e->getMessage());

データベースに接続できなかった場合は、エラーメッセージを表示させてプログラムを終了します。

画像を保存する

次に list.php を開いて、画像の保存してみましょう。

1~29行目を追加します。

データベースに接続する

2行目で先ほど作成した functions.php を読み込んで、4行目でデータベースに接続しています。

画像を保存する

6行目の if 文は

  • form から画像を POST された場合は画像を保存
  • POST でない場合は保存した画像を取得

という分岐になっています。
 

画像をフォームから POST すると、以下のデータを取得できます。

このデータを images テーブルに追加していきます。

保存が出来たら list.php にリダイレクトして完了です。(26・27行目)

データベースを確認する

ブラウザで list.php を開いて画像を保存してみましょう。

データベースに画像が保存されているか確認してください。

* 画像が保存できない場合
コードを正しく書いているのに画像が保存されない場合は、以下の記事を参考に php.ini の設定を確認してください。

あわせて読みたい
【PHP・MySQL】データベースに画像が登録できない?upload_max_filesize と post_max_size の変更方法
【PHP・MySQL】データベースに画像が登録できない?upload_max_filesize と post_max_size の変更方法

次に行うこと

次回はデータベースに保存した画像を表示していきます。

表示を確認するために、2〜3枚画像を保存しておいてください。

Subscribe
Notify of
17 Comments
古い順
新しい順 人気順
Inline Feedbacks
View all comments
wsdhead
5 years ago

参考にさせて貰ってます。
ありがとう情報。感謝です。

KI
4 years ago

めちゃくちゃ分かりやすいです!
”気づけばプロ並みPHP”の教科書やったあとで、そういえば投稿した画像データを特定ファイルからではなく、DBから表示するのはどうするのだろう?と思い、こちらにたどり着きました。

stranger28
3 years ago

お世話になります。
PHPの初心者で,大変役に立ったページでありがたかったです。

zipファイルを展開,コードをアップロードして試運転してみたところ,
添付のような結果で,画像が表示されませんでした。。
DBには,データは正しくアップロードされており,DBの構造も解説どおりです。
どのような問題が考えられるか,ご教示いただければありがたく思います。

サイトは,value-server

display.jpg
dbwordpress
2 years ago

質問があるのですが、functions.phpをrequire_onceで読み込ませた場合ほかの記述があった場合どうなるのでしょうか?
自分もfunctions.phpにdb接続を書こうと思っているのですが、読み込ませず直に書く方法はないのか模索しています。

dbwordpress
2 years ago
Reply to  Sara

※先程のコメントは取り消して頂いて、こちらをよろしくお願いします。

ありがとうございます。勉強になりました。
もう1点だけお聞きしたいのですが、functions.phpは勝手に読み込まれるものではないのでしょうか?
下記のコードをfunctions.phpに書いて、page.php(固定ページ)で呼び出す過程で話しています。

※functions.phpに書くもの
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //エラーが発生した時に、例外を投げる
echo ‘データベースへの接続が出来ました’;

return $dbh; //※接続したオブジェクトを返す
} catch (PDOException $e) {
echo $e->getMessage(); // err時はメッセージを表示
exit;
}
}

※page.phpに書くもの
$dbh = connect_db();//接続オブジェクトを保持する

dbwordpress
2 years ago
Reply to  Sara

WordPressと明記せず申し訳ありません。
データベースへの接続の部分を仮にfunction db_connect()で括ったとして、functions.phpにコードを書いた場合、呼び出す側の固定ページには$dbh = connect_db();//接続オブジェクトを保持する
との記載を加える必要があるのでしょうか?
Uncaught Error: Call to undefined function connect_db()とのエラーがでており困っております。

dbwordpress
2 years ago
Reply to  Sara

ありがとうございます。参考にいたします。

azuki
2 years ago

質問すいません、エラーが起こってしまい手詰まりになってしまいました。
functions.phpの6行目の名前とパスワードを自分のAdominにあうように変えそれ以外は全て上記の通りに打ち込んだのですが画像を選択し保存した際に
Fatal error: Uncaught PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘my_image.images’ doesn’t exist in C:\XAMPP\htdocs\2022C3B\list.php:24 Stack trace: #0 C:\XAMPP\htdocs\2022C3B\list.php(24): PDOStatement->execute() #1 {main} thrown in C:\XAMPP\htdocs\2022C3B\list.php on line 24
というようなエラーが発生しどこを直せばいいのかわからず詰まってしまいました、良ければ改善案を教えていただければ幸いです

azuki
2 years ago
Reply to  Sara

テーブル名を見直したところ無事画像を保存できました、ありがとうございます!

ABOUT ME
Sara
Sara
運営者
書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
主な使用言語:Java / Kotlin / PHP
>> 詳しいプロフィール
>> お問い合わせ
>> 書籍を出版しました!
本格的に学びたい方へ

Code for Fun プログラミング講座

POINT 01

動くコード

プログラミングの文法を学んでも、そこからどのようにアプリ開発ができるのかイメージが湧きにくいものです。

Code for Fun のプログラミング講座では、ゲームやカレンダーなどアプリとして機能するものを作りながらプログラミングを学ぶことができます。

POINT 02

自分のペースで

オンライン講座なので、ご自身のペースで学習を進めて頂けます。

受講期限もないので、いつでも前のレッスンに戻ることができるので安心です。

お申し込みしたその日からすぐに始めることができます。

POINT 03

個別サポート

プログラミング学習では、エラーが起きることはよくあります。そんな時はお気軽にお問い合わせください!

コメント欄またはメールによるサポートを回数無制限でご利用頂けます。(*講座に関連するご質問のみ対応)

今すぐ無料でお試し

17
0
この記事にコメントするx
記事URLをコピーしました