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

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

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

dBASEは、Ashton Tate社が開発したデータベース管理システム (DBMS) です。初期のマイクロコンピュータ向けに開発。広く使用されていました。現在は、RAD環境を取り入れたVisual dBASEとして、米dBASE社が提供しています。

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回答

1489閲覧

PHPのデータを自動保存したい

mrok

総合スコア0

dBASE

dBASEは、Ashton Tate社が開発したデータベース管理システム (DBMS) です。初期のマイクロコンピュータ向けに開発。広く使用されていました。現在は、RAD環境を取り入れたVisual dBASEとして、米dBASE社が提供しています。

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クリップ

投稿2021/08/28 01:25

編集2021/08/28 02:15

前提・実現したいこと

PHPでデータベースを繋ぐ基礎的な段階です。
入力されたアンケートを自動で保存させる機能をmysqlで取得したいのですが、
データが入ってきません。

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

恐らく、下記文章が何かミスを犯していると考えております。
$sql = 'INSERT INTO anketo (nickname,email,goiken) VALUES ("'.$nickname.'","'.$email.'","'.$goiken.'")';

新規登録のコードである部分ですが、『anketo (nickname,email,goiken)』がエディタ上でグレーになっております。
シングルクウォーテーションやダブルクウォーテーションで囲んだりもしましたが、DBに挿入されません。

該当のソースコード

PHP

1<!DOCTYPE html> 2<html lang="ja" dir="ltr"> 3 <head> 4 <meta charset="utf-8"> 5 <title>PHPと繋ぐ</title> 6 </head> 7 <body> 8 9 <?php 10 11 $dsn = 'mysql:dbname=phpkiso;host=localhost'; 12 $user = 'root'; 13 $password = ''; 14 $dbh = new PDO($dsn,$user,$password); 15 $dbh->query('SET NAMES utf8'); 16 17 $nickname=$_POST['nickname']; 18 $email=$_POST['email']; 19 $goiken=$_POST['goiken']; 20 21 print $nickname; 22 print '様<br/>'; 23 print 'ご意見ありがとうございました。'; 24 print '頂いたご意見『'; 25 print $goiken; 26 print '』<br/>'; 27 print $email; 28 print 'にメールを送りましたのでご確認ください'; 29 30 $mail_sub='アンケート受け付けました。'; 31 $mail_body=$nickname."様へ\nアンケートご協力ありがとうございました。"; 32 $mail_body=html_entity_decode($mail_body,ENT_QUOTES,"UTF-8"); 33 $mail_head='From:mroktkhr@gmail.com'; 34 mb_language('Japanese'); 35 mb_internal_encoding("UTF-8"); 36 mb_send_mail($email,$mail_sub,$mail_body,$mail_head); 37 38 $sql = 'INSERT INTO anketo (nickname,email,goiken) VALUES ("'.$nickname.'","'.$email.'","'.$goiken.'")'; 39 $stmt = $dbh->prepare($sql); 40 $stmt->execute(); 41 42 $dbh = null; 43 44 45 ?> 46 47 </body> 48</html>

試したこと

PHPの構文チェッカーを使用しましたが、問題はないとのこと。

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

DBサーバー
サーバのバージョン: 5.7.34 - MySQL Community Server (GPL)

WEBサーバー
PHP のバージョン: 7.4.21
Apache/2.4.48 (Unix

PHPmyadmin
Apache/2.4.48 (Unix

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

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

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

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

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

m.ts10806

2021/08/28 01:31

あと、テーブル定義をCREATE文でご提示ください。
m.ts10806

2021/08/28 01:32

>新規登録のコードである部分ですが、『anketo (nickname,email,goiken)』がエディタ上でグレーになっております。 画面キャプチャも提示してください。 SQL文もPHPからすれば文字列でしかないので、文字列として認識されてるだけでは?
guest

回答2

0

$sqlをechoしてコピペし、それをphpmyadminなどで接続して直接実行してみればいい。
そしたらエラーが分かるでしょ。

あとvaluesはpostされた値を直接変数を入れず、必ずbindすること。
さもないとセキュリティに問題あり。

投稿2021/08/29 07:45

teratail_begin

総合スコア72

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

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

0

※直接の回答ではないです。問題切り分けのためのヒントです

現状ではDB接続およびSQL実行時に何か問題があったとしてもエラーを参照できる実装になっていません。
エラーハンドリングは必ずしてください。
エラーおよびエラー処理
可能なら、オートコミットOFFにした上でトランザクション→コミットorロールバックもしておきたいところ。

$sql = 'INSERT INTO anketo (nickname,email,goiken) VALUES ("'.$nickname.'","'.$email.'","'.$goiken.'")';

入力値をそのままSQL文として構成するのはSQLインジェクションの脆弱性があります。
パラメータセット→バインドをしてください。
PHPでデータベースに接続するときのまとめ@"SELECT * FROM users WHERE id = '$id'" のように変数展開を使ってSQL文を組み立てている

投稿2021/08/28 01:34

編集2021/08/28 01:36
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問