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

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

解決済

1回答

4755閲覧

phpからMySQLのテーブルにINSERTできない原因がわかりません。

noby_

総合スコア21

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グッド

0クリップ

投稿2021/11/02 14:31

目的

aaa.phpという入力フォームを作成し、POSTメソッドでbbb.phpに値を送りbbb.phpでsqlに接続し
取得した値をuserテーブルに挿入したい

問題点

ブラウザではデータが挿入されました。と表示されるがsqlを確認すると追加されていない。

試したこと

$stmt->execute();で実行されているかif文にて判定した結果、失敗と表示された。

どの部分が間違っているか確認しましたがわかりませんでした。
よろしくお願いいたします。

↓aaa.php

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>入力フォーム</title> </head> <body> <form method="POST" action="bbb.php"> 名前 <input type="text" name="name"> 身長 <input type="text" name="height"> 誕生日 <input type="test" name="birthday"> <input type="submit" name="submit"> </form> </body> </html>

↓bbb.php

<?php if (isset($_POST['name']) && isset($_POST['height']) && isset($_POST['birthday'])) { $name = $_POST['name']; $height = $_POST['height']; $birthday = $_POST['birthday']; $dsn = 'a'; $user = 'b'; $pass = 'c'; try { $dbh = new PDO($dsn, $user, $pass); var_dump($dbh); $sql = "INSERT INTO users (name, height, birthday) VALUES (:name, :height, :birthday)"; $stmt = $dbh->prepare($sql); $stmt->bindParam(':name', $name, PDO::PARAM_STR); $stmt->bindParam(':height', $height, PDO::PARAM_STR); $stmt->bindParam(':birthday', $birthday, PDO::PARAM_STR); $check=$stmt->execute(); if ($check) { echo "成功"; } else { echo "失敗"; } echo "データが挿入されました。"; } catch (PDOException $e) { echo $e->getMessage(); exit(); } } else { echo "エラー"; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>INSERT</title> </head> <body> </body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

PDO は既定ではエラーを出さないようになっているようです。
以下を試してもらえますか?INSERT エラーの原因がわかるのでは、と思います。

php

1$dbh = new PDO($dsn, $user, $pass);

の後に

php

1$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

を追加。

<参考>
■ PDOでINSERTできない。
https://teratail.com/questions/38944

投稿2021/11/02 15:02

cx20

総合スコア4633

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

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

noby_

2021/11/02 15:13

コメントありがとうございます。 こちらのエラーメッセージが表示されました。 SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '11月9日' for column 'birthday' at row 1 DBで既に追加せれている情報を見ると0000-00-00の形で登録されておりました。 POSTで値を取得した際に上記の形に変更するようなコードを書けばよろしいでしょうか?
cx20

2021/11/02 15:28

> DBで既に追加せれている情報を見ると0000-00-00の形で登録されておりました。 > POSTで値を取得した際に上記の形に変更するようなコードを書けばよろしいでしょうか? そうですね。MySQL に詳しくないですが日付型であれば yyyy-mm-dd や yyyy/mm/dd の形式にすれば INSERT できるかと思います。 もしくは安直な方法としては HTML 側の type="test" となっているか箇所を type="date" とすれば、yyyy/mm/dd 形式で入力できるようになるかと思います。 <input type="date" name="birthday">
noby_

2021/11/02 16:22

今回はこちらの書き方でINSERTすることができました。 <input type="date" name="birthday"> また、どのようなエラーがでているのかがわかるコードを教えて頂きありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問