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

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

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

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

MySQL

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PDO

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

PHP

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

Q&A

解決済

2回答

640閲覧

php PDOを使ったMysqlへのINSERTでの、謎のWarning

yk202203

総合スコア1

INSERT

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

MySQL

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PDO

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

PHP

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

0グッド

0クリップ

投稿2022/03/29 22:16

編集2022/03/29 22:31

タイトル通り、Warningを解決できないのでご助力願いたいです。
PHP初心者です。

あるhtmlファイルからformで登録したい変数を送信し、
php側でINSERT文を書いています

Warning: Use of undefined constant qry - assumed 'qry' (this will throw an Error in a future version of PHP) in /var/www/html/test_db_POST.php on line 18
(最下部にhtml出力載せています。)

環境

  • リストPHP Version 7.4.3
  • Apache/2.4.41 (Ubuntu)
  • mysql Ver 8.0.28-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
  • mysqlnd 7.4.3

form送信側html(前後は省略)

html

1 <form action="test_db_POST.php" method="post"> 2 <ul> 3 <li> 4 <label for="char">文字:</label> 5 <input type="text" name="char2" value="" rows="10", cols="20"> 6 </li> 7 <input type="submit" value="送信"> 8 <input type="reset" value="リセット"> 9 </ul> 10 </form>

test_db_POST.php INSERT文作成、送信

PHP

1<body> 2<header> 3<h1>PHP</h1> 4</header> 5<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 6<main> 7<pre> 8 9<?php 10// データベースと接続 11include 'get_db_connection.php'; 12$db = get_db_connection(); 13 14$qry = 'INSERT INTO test_tbl (char2) VALUES (:char2);'; 15 16$stmt = $db->prepare(${qry}); 17 18$stmt->bindValue(':char2', $_POST["char2"], PDO::PARAM_STR); 19$stmt->execute(); 20 21echo "<h2>データ登録が完了しました</h2>"; 22?> 23</pre> 24</main> 25</body> 26

get_db_connection.php(接続はうまくいきます。)

PHP

1?php 2function get_db_connection(){ 3 try{ 4 $DB_DATABASE = 'household_management'; 5 $DB_USERNAME = '省略'; 6 $DB_PASSWORD = '省略'; 7 $DB_OPTION = 'charset=utf8'; 8 9 $PDO_DSN = "mysql:host=localhost;dbname=" . $DB_DATABASE . ";" . $DB_OPTION; 10 $db = new PDO($PDO_DSN, $DB_USERNAME, $DB_PASSWORD, 11 [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]); 12 13 echo "DB接続成功<br/>\n"; 14 return $db; 15 } catch(PDOException $e){ 16 echo 'DB接続失敗' . $e->getMessage(); 17 return NULL; 18 } 19} 20?>

test_db_POST.phpのページ遷移後、出力内容

html

1<body> 2<header> 3<h1>PHP</h1> 4</header> 5<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 6<main> 7<pre> 8 9DB接続成功<br/> 10<br /> 11<b>Warning</b>: Use of undefined constant qry - assumed 'qry' (this will throw an Error in a future version of PHP) in <b>/var/www/html/test_db_POST.php</b> on line <b>18</b><br /> 12<h2>データ登録が完了しました</h2> 13</pre> 14</main> 15</body>

mysqlのテーブル定義

sql

1CREATE TABLE `test_tbl` ( 2 `int1` INT(10) NOT NULL AUTO_INCREMENT, 3 `char2` VARCHAR(50) NOT NULL DEFAULT '' COLLATE 'utf8mb4_0900_ai_ci', 4 `date3` DATE NULL DEFAULT NULL, 5 PRIMARY KEY (`int1`) USING BTREE 6) 7COMMENT='基本的なクエリの確認\r\n接続確認、入力テスト、その他いろいろのためのテーブル\r\n' 8COLLATE='utf8mb4_0900_ai_ci' 9ENGINE=InnoDB 10AUTO_INCREMENT=20 11;

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

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

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

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

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

guest

回答2

0

${qry}は何を意図したものでしょうか。単に$qryとするのが適当かと思います。

投稿2022/03/29 22:50

maisumakun

総合スコア145184

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

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

yk202203

2022/03/30 13:27

ご指摘ありがとうございます。 単純に変数とわかるように読みやすくしたつもりだったのですが、逆効果でしたね。 ほかの言語のことは一旦忘れて、PHPとして違和感のないコーディングを目指したいと思います。
maisumakun

2022/03/31 06:04

「変数とわかるように」ということであれば、{$qry}と書けます。
guest

0

ベストアンサー

可変変数の参照の仕方が間違っていますね

${qry}→${"qry"}

qryという定数を参照しているのでどうしてもその書式にこだわるなら定数宣言が必要です

PHP

1const qry="qry"; 2$qry="test"; 3print ${qry};

投稿2022/03/30 00:21

yambejp

総合スコア114843

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

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

yk202203

2022/03/30 13:24

ご指摘ありがとうございます。 変数の参照間違い、気づきませんでした。 変数周りの知識が甘いようなので、きちんと調べてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問