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

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

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

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

SQL

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

PHP

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

Q&A

0回答

1719閲覧

PHPでデータベースのテーブルにアクセスしたい

NS78

総合スコア11

MySQL

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

SQL

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

PHP

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

0グッド

0クリップ

投稿2019/07/26 13:58

編集2019/07/27 03:24

データベースに複数のテーブルがある中で、接続できるテーブルと接続できないテーブルがあります。
下記のテーブル1の構造とコードだとアクセスできるのですが、テーブル2の構造とコードだとアクセスできません。
素人なのでどこが原因なのか全くわかりませんで教えていただけると助かります。
何卒宜しくお願いいたします。

■テーブル1の構造
code int型 PRIMARY A_I
name varchar型 length:15
password varchar型 length:30

■テーブル1にアクセス

<?php try{ $staff_name=$_POST['name']; $staff_pass=$_POST['pass']; $staff_name=htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8'); $staff_pass=htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8'); $dsn='mysql:dbname=shop;host=localhost;charset=utf8'; $user='root'; $password=''; $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql='INSERT INTO mst_staff (name,password) VALUES (?,?)'; $stmt=$dbh->prepare($sql); $data[]=$staff_name; $data[]=$staff_pass; $stmt->execute($data); $dbh=null; echo $staff_name; echo '追加<br />'; }catch(Exception $e){ echo '接続失敗'; exit(); } ?>

■テーブル2の構造
code int型 PRIMARY A_I
name varchar型 length:30
parice int型
img varchar型 length:30

■テーブル2にアクセス

<?php try{ $pro_name=$_POST['name']; $pro_price=$_POST['price']; $pro_name=htmlspecialchars($pro_name,ENT_QUOTES,'UTF-8'); $pro_price=htmlspecialchars($pro_price,ENT_QUOTES,'UTF-8'); $dsn='mysql:dbname=shop;host=localhost;charset=utf8'; $user='root'; $password=''; $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql='INSERT INTO mst_product (name,price) VALUES (?,?)'; $stmt=$dbh->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $stmt->execute($data); $dbh=null; echo $pro_name; echo '追加<br />'; }catch(Exception $e){ echo '接続失敗'; exit(); } ?>

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

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

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

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

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

gentaro

2019/07/26 14:06

「接続失敗」じゃなくてSQL実行時にエラーが発生しているだけでは。 例外をcatchして中身を確認せずに握りつぶすとそういうところに気づけなくなるんでおすすめできません。
m.ts10806

2019/07/26 14:06

そもそもアクセスするコードではない(SELECTではなくINSERTだから)ですが、そこは認識されてますか? あと「素人」とか「初心者」とかは記述しなくてもいいので「初心者アイコン」だけつけてもらえたらと。
m.ts10806

2019/07/26 14:17

細かいところなのでこちらに書きますが htmlspecialchars() はあくまで画面出力時のためのものなので、 目的外で利用するのはよろしくないです(入力値が変更されることになります)
NS78

2019/07/27 03:43 編集

SQL実行時にエラーが発生しているようなのですが、どこでエラーが起きているのかがわかりません。 「アクセスでなくデータベースに追加できません」という解釈でいいでしょうか? ご教授ありがとうございます。初心者マークつけました! >htmlspecialchars()はあくまで画面出力時のためのもの 了解いたしました!
m.ts10806

2019/07/27 03:46

Exception ↓ PDOException とし catch説で var_dump($e); として実行結果教えてください。 SQLエラーであればそこで出力されます
gentaro

2019/07/27 03:58

「catchブロックが実行された」ことと「接続が成功したか失敗したか」はイコールではない、ということです。(ここがわかってなさそうだけど) catchブロックは「tryブロック内で何らかのエラー(例外)」が発生した場合に実行されます。 そのエラーは「接続が失敗した」からかもしれませんし「接続には成功したけど、実行したSQL文(INSERT文)が間違っていた」からかもしれません。 「Exception $e」に本来のエラーの原因を特定できる情報が含まれているので、その中身を見て判断しないとダメですよ、という話です。
NS78

2019/07/27 05:01

mts10806様、gentaro様ありがとうございます。 なるほどです! var_dump($e);でエラーの内容が返ってきました! どうやら、テーブルのimgカラムのDEFAULT値がNULLになっていないのにVALUESでimgの値を入れていなかったのが問題だったようです。phpMyadminでDEFAULT値のNULLにチェックを入れたところ問題なくINSERT INTOできました。 お二人共ご丁寧に教えていただきましてありがとうございました。
m.ts10806

2019/07/27 05:15

次からで良いのでDBの情報を提示するときは テーブル定義が分かるもの できればCREATE TABLE文をご提示ください。 それがあればおそらく今回のやり取りなくてもすぐに解決できたものです。 エラーの見方は構文エラーだけではないのでtry-catchのExceptionは何が入っているかとかそういうのは確認するようにしてください。 ※大抵のことはPHPマニュアルに書いてあります。 あと、「エラーが」というのでしたらエラー文そのままコピペで提示するのがteratailでの質問の仕方です(要約したりしては齟齬が発生します) https://teratail.com/help/question-tips
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問