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

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

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

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

2902閲覧

PHP Mysqlで大量のデータをPDOを使いINSERT or UPDATEについて

tukino-hikari

総合スコア26

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2020/03/06 17:34

編集2020/03/06 18:12

素人です!まる2日ネットで様々検索しましたが、分からりませんでした。
こちらのサイトでは時々お世話になっております。
極力自力解決したいのですが、かれこれ2日程考えこんでおり、
ついに諦めてこちらのサイトに助けを求めました。

MysqlのPDOで複数のデータをデータベースに入れたいのですができずに困っています。
データベースにデータが無い時はINSETでデータがある時はUPDATEにしたいです。
INSERT ... ON DUPLICATE KEY UPDATE 構文を使えばよいと言うのは分かるのですが、
現在はそれ以前の問題でINSERTすらできません。

単純なプリペアードステートメントであれば、問題無くインサートできますが
今回のINSERTはなかなか難しいです。

何かヒントになることがございましたら、是非ご指導お願いしたします。

人数は40名程
1人に入れるデーター数は20件程です。

A氏:データ1、データ2、・・・・データ20
B氏:データ1、データ2、・・・・データ20
C氏:データ1、データ2、・・・・データ20



Z氏:データ1、データ2、・・・・データ20

こんな感じです。
データの入力フォームは、ちょうどエクセルの様な格子状になったフォームから
40人分を入力します。

全データをPOSTして、確認画面でSESSION変数に入れました。
決定画面でそのSESSIONに入った40人分のデータをMysqlにINSERTしたいのですが。

SESSIONに入っているデータはこんな感じです。

$_SESSION['simei_a']、$_SESSION['simei_b']、$_SESSION['simei_c']・・・・

$_SESSION['bangou_a']、$_SESSION['bangou_b']、$_SESSION['bangou_c']・・・

$_SESSION['address_a']、$_SESSION['address_b']、$_SESSION['address_c']・・・

このデータは配列にした方が良いのでしょうか?





※PDOでのデータベースへの接続は出来ています。
※テストで配列変数を使わないで、VALUES('いちご','りんご','バナナ')とすればインサートできます。
※$pdoはPDOのインスタンスになります。

$pdo=DBconect();

$stmt=$pdo->prepare("INSERT INTO hogehoge

(AAAAA,BBBBB,CCCCC,・・・・・) VALUES (:XXXX :YYYY :ZZZZ ・・・・・)");

foreach (   ?分からない   ) {

$stmt->execute(   ?分からない   );

}

ドライバーオプションは静的プレースホルダを選んでいます。
$DRIVER_OPTIONS=
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,//PDO::ERRMODE_EXCEPTION
PDO::ATTR_EMULATE_PREPARES => false,
];
エラー表示は次の通りです。
Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in

現在上の様なコードを書き、色々と手探りで試してみていますができませんでした。
宜しくご指導お願いいたします。

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

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

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

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

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

m.ts10806

2020/03/06 21:00 編集

コードは例示より実際のものでないと再現できません。 下手に省略するくらいでしたらもっと簡易なコードを作ってご提示ください。 「できません」「難しい」では何も伝わりませんので、 起きている現象のみをそのまま伝えるようにしてもらえたらと。 また、コードはマークダウンのcode機能を利用してご提示ください。
guest

回答2

0

自己解決

PHPマニュアルやらネットやら、色々調べて散々アチコチいじりましが、結局原因はデータベースのカラム名にアンダーバーを使っていてそれが原因でした。何とか解決できました。お世話になりました。

投稿2020/03/08 03:36

tukino-hikari

総合スコア26

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

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

0

肝心の箇所が隠されているので、エラーメッセージのとおりですとしか言えないですが、そもそも UI の設計から見直してみては?

データの入力フォームは、ちょうどエクセルの様な格子状になったフォームから

40人分を入力します。

Web の UI として、上記は使いにくいと思います。

あとデータの引き渡し方法として、

$_SESSION['simei_a']、$_SESSION['simei_b']、$_SESSION['simei_c']・・・・

$_SESSION['bangou_a']、$_SESSION['bangou_b']、$_SESSION['bangou_c']・・・

$_SESSION['address_a']、$_SESSION['address_b']、$_SESSION['address_c']・・・

もちょっと無いかと。
内容次第ですけど
$_SESSION['id']['simei']
$_SESSION['id']['bangou']
$_SESSION['id']['address']
みたいな持ち方しないと、あとで、foreach で回しにくいと思います。

投稿2020/03/06 20:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tukino-hikari

2020/03/07 02:01

有難うございます。まずは、そこから書き換えて再度挑戦してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問