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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

2回答

740閲覧

WEB上で画像を開き、それをデータベースに登録する

Masa_1321412

総合スコア12

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

1クリップ

投稿2021/06/28 15:29

編集2021/06/30 14:27

前提・実現したいこと

WEB上で画像を開き、それをデータベースに登録するというプログラムを作成したいです
使用している言語はPHPで使用しているデータベースはMySQLです

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

以下の画像のようなエラーが出ており、データベースにも画像が登録されていません
データベースの構造については3枚目の画像のようになっています
web画面

データベース

データベース構造

エラーログの内容は以下のようになっていました
エラーログ

また、別の様々な画像で試してみたところ上記のエラーが出るものと正常に保存できるものがあることがわかりました
画像はすべてpng型でファイルサイズにおいてもエラーが出るものとほぼ変わりありません
いろいろなサイズ、型の画像で保存を試して原因を探ろうと思います
データベース

該当のソースコード

upimg.php <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=utf-8"> <TITLE>データベースへの画像の格納</TITLE> </HEAD> <P>ファイルのアップロード</P> <BODY> <FORM method="POST" enctype="multipart/form-data" action="upimg.php"> <INPUT type="hidden" name="MAX_FILE_SIZE" value="65536"> 画像のファイル名を入力してください(最大64KByte)<BR> ファイル名:<INPUT type="text" name="file_name"><BR> パス:<INPUT size="30" type="file" name="upfile"><BR> <BR> <INPUT type="submit" name="submit" value="送信"> <INPUT type="reset" name="reset" value="リセット"> </FORM> <?php if(isset($_POST["submit"])){ try{ $dsn = 'mysql:dbname=map;host=localhost'; $user = 'root'; $password = ''; $dbh = new PDO($dsn, $user, $password); //データベースに接続 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->query('SET NAMES utf8'); //文字コードのための設定 print "<hr>"; $file_name = $_POST["file_name"]; $imgdat = file_get_contents($_FILES["upfile"]["tmp_name"]); $sql = "INSERT INTO picture (name,data) values (?,?)"; $stmt = $dbh->prepare($sql); $data[] = $file_name; $data[] = $imgdat; $stmt->execute($data); $dbh = null; //データベースから切断 } catch(PDOException $e){ print 'サーバが停止しておりますので暫くお待ちください。'; exit(); } } ?> </BODY> </HTML>

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

データベースサーバ
サーバ: 127.0.0.1 via TCP/IP
サーバの種類: MariaDB
サーバの接続: SSLは使用されていません ドキュメント
サーバのバージョン: 10.4.14-MariaDB - mariadb.org binary distribution
プロトコル バージョン: 10
ユーザ: root@localhost
サーバの文字セット: UTF-8 Unicode (utf8mb4)

ウェブサーバー
Apache/2.4.46 (Win64) OpenSSL/1.1.1g PHP/7.4.11
データベースクライアントのバージョン: libmysql - mysqlnd 7.4.11
PHP 拡張: mysqli ドキュメント curl ドキュメント mbstring ドキュメント
PHP のバージョン: 7.4.11

phpMyadmin
バージョン情報: 5.0.3, 最終安定バージョン: 5.1.1
ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2021/06/28 16:21

まずはWEBサーバ(Apache)のエラーログを確認してみてください。$_FILES["upfile"]["tmp_name"]が空っぽということは、おそらくはファイルのアップロード処理が失敗していると思われます。ファイルのアップロードが失敗している理由は質問文に書かれている情報だけではちょっとわかりません。エラーログの内容を見て対応できそうであれば対応していただき、対応できないようであればエラーログの内容を質問文に追記してください。
m.ts10806

2021/06/28 21:23 編集

size属性が影響してるかと思ったんですが、そのエラー出ないですね。 デバッグしてみたらtmp_nameにも.tmpファイルが入ってきてました。 XAMPPなのでWindowsでPHPも7.4ほぼ同じ環境だとは思うのですけど。
guest

回答2

0

直接関係ないかもしれませんが
PDOのtry-catchはエラーモードを設定した上
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

catch(PDOException $e){

で例外を受けて下さい

また、ファイルが受け取れていないなら
$_FILES["upfile"]["error"]を先にチェックしてください

投稿2021/06/29 09:11

編集2021/06/29 09:14
yambejp

総合スコア116734

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Masa_1321412

2021/06/30 14:16

ご指摘ありがとうございます。 修正します
guest

0

ベストアンサー

こんにちは、天使です。

php.iniの以下のディレクティブがアップロードするファイルに対して適切か確認してみましょう。

file_uploads = On
post_max_size = 100M
upload_max_filesize = 50M

投稿2021/06/28 23:14

angel-sun

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Masa_1321412

2021/06/30 14:18

回答ありがとうございます file_uploads = On post_max_size = 40M upload_max_filesize = 40M となっていました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問