質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

解決済

PHP 画像データをデータベースに保存する時のエラー

emi_ono
emi_ono

総合スコア77

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

2回答

0リアクション

1クリップ

282閲覧

投稿2022/09/03 13:16

編集2022/09/03 14:29

前提

PHPで画像をアップロードして表示するページを作っています。
画像データをDBに保存したいのですが、エラーが出て解決ができません。
アドバイスを頂きたいです。よろしくお願いします。

発生している問題・エラーメッセージ

Fatal error: Uncaught Error: Call to a member function prepare() on null in /home/●/●/public_html/detail/owner/3.0.1/dbc.php:34 Stack trace: #0 /home/●/●/public_html/detail/owner/3.0.1/file_upload.php(55): fileSave('staff1.png', '/home/●...', '\xE3\x83\x86\xE3\x82\xB9\xE3\x83\x88', '1') #1 {main} thrown in /home/●/●/public_html/detail/owner/3.0.1/dbc.php on line 34

エラーのdbc.php on line 34に該当する部分は
$stmt = dbc()->prepare($sql);
の部分です。

該当のソースコード

dbc.php

PHP

<?php function dbc() { try{ require_once( '../../../core/config.php' ); $dbh = new PDO( DSN, DB_USER, DB_PASS, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); return $pdo; } catch ( PDOException $e ){ exit($e->getMessage()); } } /** * ファイルデータを保存 * @param string $filename ファイル名 * @param string $save_path 保存先のパス * @param string $staffname スタッフ名 * @param int $shop_id 店舗ID * @return bool $result */ function fileSave($filename, $save_path, $staffname, $shop_id) { $result = False; $sql = "INSERT INTO staff(file_name, file_path, staff_name, shop_id) VALUE (?,?,?,?)"; try{ $stmt = dbc()->prepare($sql); $stmt->bindValue(1,$filename); $stmt->bindValue(2,$save_path); $stmt->bindValue(3,$staffname); $stmt->bindValue(4,$shop_id); $result = $stmt->execute(); return $result; }catch(Exception $e){ echo '捕捉した例外: ', $e->getMessage(), "\n"; return $result; } }

file_upload.php(一部抜粋しました)

PHP

require_once "./dbc.php"; if(count($err_msgs) === 0){ //ファイルはあるかどうか? if ( is_uploaded_file( $tmp_path ) ) { if(move_uploaded_file($tmp_path, $save_path )){ echo $filename.'を'.$upload_dir.'にアップしました。'; //DBに保存(ファイル名、ファイルパス、スタッフ名、店舗ID) $result = fileSave($filename, $save_path, $staffname, $shop_id); if($result){ echo 'データベースに保存しました。'; }else{ echo 'データベースへの保存が失敗しました。'; } }else{ echo 'ファイルが保存できませんでした。'; echo '<br>'; } echo '<br>'; }else{ echo 'ファイルが選択されていません。'; echo '<br>'; } }else{ foreach($err_msgs as $msg){ echo $msg; echo '<br>'; } }

データベース

CREATE TABLE IF NOT EXISTS `staff` ( `image_id` int(11) NOT NULL COMMENT 'データのID', `file_name` varchar(255) NOT NULL COMMENT '画像の名前', `file_path` varchar(255) NOT NULL, `staff_name` varchar(140) NOT NULL COMMENT 'スタッフ名', `shop_id` int(11) NOT NULL COMMENT '店舗ID', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '作成日時' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

file_upload.phpでdbc.phpを読み込み、エラーがなかった場合、fileSave関数を使いDBに保存という流れで実行しようと思いました。

試した事

  • DBの接続は確認できました。
  • Xサーバーの指定したフォルダ内に画像は保存されています。

補足情報(FW/ツールのバージョンなど)

phpMMyAdmin
Xサーバー

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。