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

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

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

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

MySQL

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

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

データベース

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

Q&A

2回答

1233閲覧

PHP 変数DB一括挿入

GPE46232209

総合スコア14

INSERT

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

MySQL

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

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

データベース

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

0グッド

1クリップ

投稿2021/08/03 13:40

編集2021/08/03 13:58

前提・実現したいこと

ランダムな数値を作成して
MYSQLへINSERTするという
路頭に迷った結果、変数でDB挿入しようとしています。
やりたいことはランダム作成した数値をDBへ一括挿入したいです。
現在悩んでいることは配列で分割した変数が未定義扱いされていることです。

該当のソースコード

<?php //function でPDOっが使えないことを調べる・ $db = new PDO('mysql:dbname=c-pro;host=127.0.0.1;charset=utf8', 'root', '' ); $str2 = array(); for ($i=0; $i<10;$i++) { $str3 = substr(str_shuffle("ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz0123456789"), 0, 15); $str2 = array_merge($str2, array($str3)); } extract( $str2, EXTR_PREFIX_INVALID, "pass"); $db->beginTransaction(); try { $sql = $db->prepare("INSERT INTO enter_pas (password) VALUES ('.$pass_1'),('.$pass'),('.$pass_3'),('.$pass_4'),('.$pass_5'),('.$pass_6'),('.$pass_7'),('.$pass_8'),('.$pass_9'),('.$pass_10')"); } catch (Exception $e) { $db->rollBack(); } ?>

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

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

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

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

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

guest

回答2

0

定義済み変数を確認してみてください。

php

1$str2 = array(); 2for ($i=0; $i<10;$i++) { 3 $str3 = substr(str_shuffle("ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz0123456789"), 0, 15); 4 $str2 = array_merge($str2, array($str3)); 5} 6extract( $str2, EXTR_PREFIX_INVALID, "pass"); 7 8var_dump(get_defined_vars());

get_defined_vars()
※スーパーグローバル変数などPHPがデフォルトで定義される変数も含みます

ない変数を利用していますよね。

php

1echo "INSERT INTO enter_pas (password) VALUES ('.$pass_1'),('.$pass'),('.$pass_3'),('.$;pass_4'),('.$pass_5'),('.$pass_6'),('.$pass_7'),('.$pass_8'),('.$pass_9'),('.$pass_10')"; 2 3/** 4PHP Warning: Undefined variable $pass in xx.php on line 10 5PHP Warning: Undefined variable $pass_10 in xx.php on line 10 6**/

pass_で変数名つけてるのですからpassはないですし、<10で回しているので10は含まれません。

php

1for ($i=0; $i<10;$i++){ 2 echo $i; 3} 4

それに、文字列連結をしたいのであれば外がダブルクォーテーションであれば中もダブルクォーテーションです。

PHP

1$hoge = "e"; 2echo "t".$hoge."st"; 3

展開可、不可も考慮する必要があります。

いずれにしてもSQLが正しくできているか確認はしてください。
echoで出力された文字列をPHPからではなく直接実行して想定の結果が得られるかどうかの確認です。


ただ、変数をそのまま突っ込むのではなく、可能ならプリペアドステートメントからバインドしてください。
PHPでデータベースに接続するときのまとめ#"SELECT * FROM users WHERE id = '$id'" のように変数展開を使ってSQL文を組み立てている

投稿2021/08/03 22:58

編集2021/08/04 00:31
m.ts10806

総合スコア80861

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

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

GPE46232209

2021/08/04 14:13

ありがとうございます。
guest

0

extractがつける数値は1ではなく0から始まるのでは?
わざわざ変数に落とさなくても配列で渡せばいいと思いますが・・・

sample

PHP

1$data = []; 2for ($i=0; $i<10;$i++) { 3 $str3 = substr(str_shuffle("ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz0123456789"), 0, 15); 4 $data = array_merge($data, array($str3)); 5} 6extract( $data, EXTR_PREFIX_INVALID, "pass"); 7try{ 8 $pdo = new PDO($dsn, $user,$password); 9 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 10 $sql ="INSERT INTO enter_pas (password) VALUES "; 11 $sql.=implode(",",array_fill(0,count($data),"(?)")); 12 $stmt = $pdo->prepare($sql); 13 $stmt->execute($data); 14}catch(PDOException $e){ 15 die($e->getMessage()); 16} 17print_r($sql);

投稿2021/08/04 01:46

編集2021/08/04 03:45
yambejp

総合スコア115012

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

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

GPE46232209

2021/08/04 14:11

恥ずかしながら連想配列での扱いがわからなかったため、変数で用いていましたが、配列での記入、参考にします!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問