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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

1回答

1023閲覧

SQL入門者 データベースにデータを書き込めない理由が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

1クリップ

投稿2022/02/11 01:45

編集2022/02/11 02:14

提示コード///コメント部ですが提示画像のデータなのですが値が書き込めませんこれはなぜでしょうか?

参考サイト: https://note.com/koushikagawa/n/n9c6e396e2687
参考サイト: https://www.flatflag.nir87.com/insert-942

試したこと

順序を確認
大文字、小文字を確認
カンマのつけ忘れを確認
$strm->bindValue()の順序を確認
以下のようなことを試しました。

php

1$sql = "INSERT INTO Account (`name`,`ID`,`password`,`mail`,`date`) VALUES (?,?,?,?,?)"; 2 $stm = $dbh->prepare($sql); 3 $data[] = $_SESSION['name']; 4 $data[] = "test"; 5 $data[] = $password; 6 $data[] = $_SESSION['mail']; 7 $data[] = date("Y-m-d H:i:s"); 8 $stm->execute($data);

イメージ説明

php

1$dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; 2$dbh = new PDO($dsn,"root",""); 3$dbh->beginTransaction(); 4$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 5$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

php

1 2 3 4 5 6<?php 7if(isset($_POST['btn_submit'])) 8{ 9 print($_SESSION['password']); 10 //パスワードのハッシュ化 11 $password = password_hash($_SESSION['password'], PASSWORD_DEFAULT); 12 //ここでデータベースに登録する 13 try 14 { 15//////////////////////////////////////////////////////////// 16 $sql = "INSERT INTO Account (`name`,`ID`,`password`,`mail`,`date`) VALUES (:name,:id,:password_hash,:mail,now())"; 17//////////////////////////////////////////////////////////// 18 $stm = $dbh->prepare($sql); 19 $stm->bindValue(':name', $_SESSION['name'], PDO::PARAM_STR); 20 $stm->bindValue(':id', "test", PDO::PARAM_STR); 21 $stm->bindValue(':password_hash', $password, PDO::PARAM_STR); 22 $stm->bindValue(':mail', $_SESSION['mail'], PDO::PARAM_STR); 23 $stm->execute(); 24 25 //pre_userのflagを1にする(トークンの無効化) 26 $sql = "UPDATE preAccount SET enable=1 WHERE mail=:mail"; 27 28 $stm = $dbh->prepare($sql); 29 30 //プレースホルダへ実際の値を設定する 31 $stm->bindValue(':mail', $mail, PDO::PARAM_STR); 32 $stm->execute(); 33 34 /* 35 * 登録ユーザと管理者へ仮登録されたメール送信 36 */ 37 /* 38 $mailTo = $mail.','.$companymail; 39 $body = <<< EOM 40 この度はご登録いただきありがとうございます。 41 本登録致しました。 42EOM; 43 mb_language('ja'); 44 mb_internal_encoding('UTF-8'); 45 46 //Fromヘッダーを作成 47 $header = 'From: ' . mb_encode_mimeheader($companyname). ' <' . $companymail. '>'; 48 49 if(mb_send_mail($mailTo, $registation_mail_subject, $body, $header, '-f'. $companymail)) 50 { 51 $message['success'] = "会員登録しました"; 52 } 53 else 54 { 55 $errors['mail_error'] = "メールの送信に失敗しました。"; 56 } 57 58 //データベース接続切断 59 $stm = null; 60 61 //セッション変数を全て解除 62 //$_SESSION = array(); 63 //セッションクッキーの削除 64 if (isset($_COOKIE["PHPSESSID"])) 65 { 66 setcookie("PHPSESSID", '', time() - 1800, '/'); 67 } 68 //セッションを破棄する 69 // session_destroy(); 70 */ 71 72 }catch (PDOException $e) 73 { 74 // print("sample"); 75 //トランザクション取り消し(ロールバック) 76 $dbh->rollBack(); 77 $errors['error'] = "もう一度やりなおして下さい。"; 78 print('Error:'.$e->getMessage()); 79 } 80 81} 82?> 83

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

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

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

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

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

m.ts10806

2022/02/11 01:48

>これはなぜでしょうか? その理由は何度もアドバイスもらってるはずですが、なぜ質問するのでしょうか
退会済みユーザー

退会済みユーザー

2022/02/11 01:50

いろいろ確認しましたがわからないので
m.ts10806

2022/02/11 02:02

基礎をおさえなきゃ幾ら表面だけ確認したところで全く無意味です。
guest

回答1

0

ベストアンサー

トランザクションの開始と、エラー時のロールバックは書いても、
反映を確定するコミットは書かなければ反映されなくて当たり前ですよね。
データベースを扱うときの基本的なことを観ないで、ただコードをコピペしていては身につきませんよ。

その参照サイトの記事にとらわれると、本質を見失いますよ。
現役で活躍されているエンジニアさんの書かれた記事なのでしょうが、
掲載時に掲載したコードで期待通りに動作する保証なんて、残念ながら動かしてみるまでわかりません。
もしかしたら記事の著者の環境だけでしか動かないものかもしれませんから、
自分の目で見極めて、自分の環境で動かしてみて、やっと身につきます。

もっと基礎的なところや、ベテランらから評価されている記事を読むべきです。
PHPでデータベースに接続するときのまとめ - Qiita
これをしっかり読んでくださいとお伝え申し上げます。
あくまで基本的な流れの参考として必要な事柄がよくまとまっているため、
これを軸に、
PHP: PDO - Manual
に掲載されているドキュメントと併せて読んで理解を深めてください。

投稿2022/02/11 02:02

編集2022/02/11 02:27
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問