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

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

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

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

1334閲覧

データベースからのsql記述及び実行と、その表示の仕方がわかりません。

Tsukumo_Aoi

総合スコア21

SQL

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2017/06/29 03:11

編集2017/06/29 03:17

データベースから最新の予約IDを取得してから、その予約ID+1の値を新規予約のIDに設定する機能を実装中に以下のエラーメッセージが発生しました。

###発生している問題・エラーメッセージ
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\taiikukan\reserve_scr.php on line 31

###該当のソースコード コード ``` function disp_form() { $pdo = new PDO('mysql:host=localhost; dbname=taiikukandb;charset=utf8','dbuser','abc123'); $pdo -> setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = "select * FROM yoyaku_tbl where reserveID(max)"; $stmt = $pdo -> query($sql); while ($row = $stmt -> fetch(PDO::FETCH_ASSOC)){ print <<< FRM1 <form action="./reserve_scr.php" method="get"> <table border=0"> <tr> <td>予約番号</td> <td> ($row['reserveID']); </td></tr>

###試したこと
様々なサイトでデータベースからの情報取得及びその表示方法を調べていろいろ試しましたが、
うまく表示できていません。
###補足情報(言語/FW/ツール等のバージョンなど)
PHPで記述しており、コーディングはAtomで行っております。

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

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

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

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

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

m.ts10806

2017/06/29 03:12 編集

プログラムコードは```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください) また、若干質問テンプレート部分の文言が残っているようなので質問内容を精査してください。
guest

回答3

0

ベストアンサー

エラーについて

ヒアドキュメント内における連想配列の展開の仕方ではないでしょうか?

PHP

1($row['reserveID']); 2 34 5{$row['reserveID']}

ヒアドキュメントの閉じ部分も含めたソース全体をご提示いただいたわけではないので
他にもあるかもしれませんが・・ひとまず。

SQLについて

既に指摘があるかとは思います、おそらくそのSQLでは予約ID+1は取得できません。
SQLのエラーがでそうです。

select * FROM yoyaku_tbl where reserveID(max)

提示ソースのようにreserveID(max)と書いてしまうとreserveID()という関数にmaxという引数を渡していることになります。
「そんな関数ないよ(&引数maxに対して「そんなカラムないよ」)」ってSQLのエラーが出るんじゃないでしょうか。

単に最大値+1をとりたいだけならselect max(reserveID)+1 FROM yoyaku_tblだけで良いはず。また、別名つけておくととりやすくなります。
例:select max(reserveID)+1 as new_reserve_id FROM yoyaku_tbl

PHP

1$row = $stmt->fetch(PDO::FETCH_ASSOC); //SQLにより最大値+1の情報のみ1行1カラムのみが取得されている 2 3print <<< FRM1 4<form action="./reserve_scr.php" method="get"> 5<table border="0"> 6<tr> 7<td>予約番号</td> 8<td> 9{$row["new_reserve_id"]} 10FRM1; 11

あとyambejpさんのご指摘のようにhtmlエスケープをかけておくと良いでしょう。
※ご提示ソース内のhtmlに記述ミスがあったので勝手に修正してます。比較して探してみてください。

プログラミング言語からSQLを用いてDB問い合わせを行う際は、
実際にDBに対してツールなどで直接SQLを実行して、問題なく意図通りに動くかどうかを確認されたほうが良いと思います。
mysqlならphpmyadmin、postgreSQLならpgadminなど、ですね。

投稿2017/06/29 03:17

編集2017/06/29 04:32
m.ts10806

総合スコア80850

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

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

m.ts10806

2017/06/29 03:19

;がついていたので()も何かの名残なのかなと思って勝手に削除してしまいましたが、文字列として"reserveID"を()で囲いたいのであれば残しておいてください。
Tsukumo_Aoi

2017/06/29 03:21

ありがとうございました! 無事解決できました! 回答感謝いたします!
m.ts10806

2017/06/29 04:17

SQL部分についても回答しました。ご確認ください。 ※これでタイトル部分の疑問も含めて全て解決できるか分かりませんが、ご参考まで。
m.ts10806

2017/06/29 04:25

ただ、reserveIDが整数型であることが前提のSQLなので、整数型ではない場合(英数混在など)はSQLで頑張ってとるのではなく、order でreserveID降順ソートにlimit 1とかつけて1件だけ取得して、PHP側で加工して最大値+1とすると良いです。
Tsukumo_Aoi

2017/06/29 05:15

整数型にしてあるので大丈夫かと思います。 親切丁寧にありがとうございました!
guest

0

php

1print <<< FRM1 2<form action="./reserve_scr.php" method="get"> 3<table border=0"> 4<tr> 5<td>予約番号</td> 6<td> 7({$row['reserveID']}); 8 9</td></tr> 10```ですね。連想配列を埋め込むときは`{ }`で囲わないとおかしくなります。

投稿2017/06/29 03:16

shi_ue

総合スコア4437

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

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

Tsukumo_Aoi

2017/06/29 03:20

ありがとうございます! ひとまずこれについては解決できました! 回答感謝します!
guest

0

where reserveID(max)

は、SQLの書式的にあやしいですが大丈夫でしょうか?

また、reserveIDのデータ型にもよりますが

PHP

1while ($row = $stmt -> fetch(PDO::FETCH_ASSOC)){ 2$reserveID=htmlspecialchars($row['reserveID']); 3 4print <<< FRM1 5・・・・ 6{$reserveID} 7 8・・・・ 9FRM1; 10}

のような処理をするよう心がけた方が良いと思います

投稿2017/06/29 03:30

yambejp

総合スコア114784

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

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

Tsukumo_Aoi

2017/06/29 05:14

SQL間違ってました・・・(笑) アドバイスありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問