前提
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
1<?php 2 function dbc() 3 { 4 try{ 5 require_once( '../../../core/config.php' ); 6 $dbh = new PDO( DSN, DB_USER, DB_PASS, 7 [ 8 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 9 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 10 ]); 11 return $pdo; 12 } catch ( PDOException $e ){ 13 exit($e->getMessage()); 14 } 15 } 16 17 /** 18 * ファイルデータを保存 19 * @param string $filename ファイル名 20 * @param string $save_path 保存先のパス 21 * @param string $staffname スタッフ名 22 * @param int $shop_id 店舗ID 23 * @return bool $result 24 */ 25 26 function fileSave($filename, $save_path, $staffname, $shop_id) 27 { 28 $result = False; 29 30 31 $sql = "INSERT INTO staff(file_name, file_path, staff_name, shop_id) VALUE (?,?,?,?)"; 32 33 try{ 34 $stmt = dbc()->prepare($sql); 35 $stmt->bindValue(1,$filename); 36 $stmt->bindValue(2,$save_path); 37 $stmt->bindValue(3,$staffname); 38 $stmt->bindValue(4,$shop_id); 39 $result = $stmt->execute(); 40 return $result; 41 }catch(Exception $e){ 42 echo '捕捉した例外: ', $e->getMessage(), "\n"; 43 return $result; 44 } 45 46 47 } 48
file_upload.php(一部抜粋しました)
PHP
1require_once "./dbc.php"; 2if(count($err_msgs) === 0){ 3 //ファイルはあるかどうか? 4 if ( is_uploaded_file( $tmp_path ) ) { 5 if(move_uploaded_file($tmp_path, $save_path )){ 6 echo $filename.'を'.$upload_dir.'にアップしました。'; 7 //DBに保存(ファイル名、ファイルパス、スタッフ名、店舗ID) 8 $result = fileSave($filename, $save_path, $staffname, $shop_id); 9 10 if($result){ 11 echo 'データベースに保存しました。'; 12 }else{ 13 echo 'データベースへの保存が失敗しました。'; 14 } 15 }else{ 16 echo 'ファイルが保存できませんでした。'; 17 echo '<br>'; 18 } 19 echo '<br>'; 20 }else{ 21 echo 'ファイルが選択されていません。'; 22 echo '<br>'; 23 } 24}else{ 25 foreach($err_msgs as $msg){ 26 echo $msg; 27 echo '<br>'; 28 } 29}
データベース
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サーバー
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。