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

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

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

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

PHP

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

Q&A

3回答

3673閲覧

バイナリデータ格納方法

nejico

総合スコア49

MySQL

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

PHP

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

0グッド

0クリップ

投稿2015/09/11 06:31

html

1<input class="input_text" type="text" name="A1_name"> 2<input class="input_text" type="text" name="A1_prices"> 3<input type="file" name="A1_image"> 4<input type="checkbox" name="A1_sale">

で入力したデータをDB(mysql)に格納しようとしています。

入力したデータの取得は以下のコードできました。

php

1$_SESSION["A1_name"]=$_POST["A1_name"]; 2$_SESSION["A1_prices"]=$_POST["A1_prices"]; 3if(isset($_POST["A1_image"])){ 4 $_SESSION["A1_image_data"]=file_get_contents($_FILES["A1_image"]["tmp_name"]); 5 $_SESSION["A1_image_name"]=$_FILES["A1_image"]["name"]; 6 $_SESSION["A1_image_mime"]=$_FILES["A1_image"]["type"]; 7} 8if(isset($_POST["A1_sale"])){ 9 $_SESSION["A1_sale"]="1"; 10}else{ 11 $_SESSION["A1_sale"]="0"; 12} 13

バイナリ部分だけコメントアウトするとinsertはできました。

画像のバイナリだけ格納できないので解決方法を教えてください。

エラーコードは
SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters
と出ました。

データ型はmediumblobです。
画像サイズも小さいもの(47KB)で試してみましたができませんでした。

よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2015/09/11 07:11

PHPからMySQLにアクセスする際のドライバはPDO:MySQLですか、それともmysqliですか?
nejico

2015/09/11 07:16

PDOです
guest

回答3

0

_SESSION
は使わないほうが良さそうな気がします。

参考:[PHP]MySQLを利用した画像の保存と出力 | WEBプログラム覚書
http://www.kantenna.com/pg/2010/04/phpmysql.php

投稿2015/09/11 07:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

まず確認なのですが、入力フォームから送信された画像データはPHP側で取得出来ているのでしょうか?
それに、イメージデータをセッションに格納するとセッションの容量が大きくなりデータを格納出来ないのではないかと思います。

私が以前制作していたシステムでの、イメージをデータベースに登録する機能がありましたが、イメージデータをセッションに格納したとたんにエラーが発生し、別の方法に変更したのを覚えています。

こちらは、もしかするとサーバ側の設定なのかもしれませんが・・・・

また、Formタグに enctype="multipart/form-data を設定されていますか?

投稿2015/09/11 07:16

takayukiinaba

総合スコア1158

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

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

nejico

2015/09/11 07:30

セッションに格納はできています。 Formタグに enctype="multipart/form-dataも書いてあります。
guest

0

こんにちは。

エラーコードを見る限りではこちらの方法で解決するかもしれません。

疑問符プレースホルダと、 名前付きプレースホルダを併用しようとすると発生するのでどちらかを選択する

http://qiita.com/mpyw/items/b00b72c5c95aac573b71#2-16

ご参考までに。

投稿2015/09/11 07:12

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nejico

2015/09/11 07:27 編集

プレースホルダは使わずに書いたのですが、使った方がいいのでしょうか? $insert_sql = "insert into setting ("; $insert_sql .="A1_name,A1_prices,A1_image_binary,A1_image_name,A1_image_name,A1_image_mime,A1_sale"; $insert_sql .= ") values ( "; $insert_sql .="'".$_SESSION["A1_name"]."',"; $insert_sql .="'".$_SESSION["A1_prices"]."',"; $insert_sql .="'".$_SESSION["A1_image_binary"]."',"; $insert_sql .="'".$_SESSION["A1_image_name"]."',"; $insert_sql .="'".$_SESSION["A1_image_mime"]."',"; $insert_sql .="'".$_SESSION["A1_sale"]."',"; $insert_sql .= ")"; $stmt = $this->pdo->prepare($insert_sql); $stmt->execute();
takayukiinaba

2015/09/11 07:42

↑項目一つ多くないですか? A1_image_name が2つありますが・・・
退会済みユーザー

退会済みユーザー

2015/09/11 07:47

SQLインジェクションされないようにプレースホルダの利用を心がけるのが良いかと思われます。 こちらのサイトがプレースホルダの必要性について参考になるかもしれません。 http://lets.postgresql.jp/documents/tutorial/with_php/against_sql_injection/placeholder 直接値を入れているあたりで、ひょっとするとプレースホルダと解釈可能な文字列が入っているのかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問