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

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

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

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

1回答

1392閲覧

DBに登録してある特定のデータを表示させたい

takeke

総合スコア60

MySQL

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2018/10/14 11:26

スケジューラーをつくりたいのですが、その途中のデータベースから特定のデータををとってきて表示させたいのですが、調べてもうまくいかないので教えていただきたく質問させていただきます。

カレンダーを作って、その中に予定のテーブルに入っているデータを表示したいのですが、どのような手順を踏むのかがわかりません。

環境はxamppでphpmyadminをつかってmysqlに直接登録しています。phpmyadmin上のSQL文を入力する場所ではselect文をつかって取り出したいデータを持っているレコードは検索できたのですが、実際にカレンダー上での表示の仕方がわかりません。

本当でしたら、カレンダーと予定のテーブルを関連させて、カレンダーの日付と予定の日付が合っているところに予定の名前を表示ということをしたいのですが、予定を出力ということがうまくいっていません。

こちらのサイトを参考に作りました
https://testtesttest21.sakura.ne.jp/wp/2017/05/16/%E7%AC%AC8%E5%9B%9E%E3%80%8C%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E8%A1%A8%E7%A4%BA%E3%80%8Dphp%E3%81%A8html%E3%81%A7%E7%A5%9D%E6%97%A5%E5%85%A5/
コードは多すぎて載せられなかったのでGitHubにのせました下https://github.com/take1031/take1031/blob/master/%E3%81%A6%E3%81%99%E3%81%A8%E3%83%BC

該当箇所は195行目あたりです。

php

1 2try{ 3 //検索処理 4 $stmt = $pdo->prepare('SELECT * FROM yotei 5 JOIN yotei_group 6 ON yotei_group.yotei_id = yotei.yotei_id 7 WHERE DATE_FORMAT(yotei.start_date, "%y%m") = DATE_FORMAT("2018-10-01", "%y%m") 8 ORDER BY yotei.start_date ASC;'); 9 $display_date_next = date("Y-m-d",strtotime(' +1 month',strtotime($display_date))); 10 $stmt -> bindParam(':month_fast_day', $display_date, PDO::PARAM_STR); 11 $stmt -> bindParam(':next_month_fast_day', $display_date_next, PDO::PARAM_STR); 12 $stmt -> execute();//実行 13 if ( $stmt == false ){ 14 //print 'SELECTしましたがユーザーデータが一件もありません'; 15 } 16} catch (Exception $e) { 17 exit('データベース検索に失敗しました。'.$e->getMessage()); 18} 19

yoteiテーブルの中身です

yotei_id int start_date date end_date date start_time time end_time time yotei_kind int yotei_title varchar yotei_show varchar

実際に登録してあるレコードは1件で、そのstart_dateは2018-10-09です。なのでこれはselectできているはずなので,こちらのyotei_titleをカレンダー上に表示させる方法をご教授よろしくお願いいたしますm(_ _)m

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

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

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

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

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

m.ts10806

2018/10/14 11:49

2018-10-01をwhereに入れていて2018-10-09がヒットするとは思えないのですが…? いずれにしても「長いコード」はそのぶん不具合が潜り込みやすいのでもっとミニマムなコードで試された方が良いのでは
kaba

2018/10/14 12:39

where句にはDATE_FORMAT(yotei.start_date, "%y%m")とあるので年月が一致すればヒットします。
m.ts10806

2018/10/14 13:37

読み違えてました。補足ありがとうございます。でしたらもうちょっとスッキリする書き方ありそうですね
takeke

2018/10/14 16:14

お二方ともありがとうございます!確かにも簡潔に書いた方がよさそうですよね。この場合ですが、2018年の10月にしか対応できず、他の年月でも対応するような書き方ってありますか?whereの1行がなければすべてとってくると思うんですが、それだと流石に非効率ですよね?
m.ts10806

2018/10/15 01:59

$_GETで年月渡せば良いかと。urlにくっつければ良いだけなのでform送信しなくても良いですし。
takeke

2018/10/16 10:32

ありがとうございます!WHEREの1行をWHERE DATE_FORMAT(yotei.start_date, "%y%m") = $_GET("%y%m")みたいなことですね!←()の中の書き方は調べて学習しないとわかりませんが。
m.ts10806

2018/10/16 10:53

だいぶ間違ってるように思いますけどそのあたりはPHPマニュアルで確認してください
takeke

2018/10/16 11:10

勘違いしていて申し訳ないです。現在、次の月を表示するのは<a href="top.php?first_day_of_month=<?php echo date('Y-m-01',strtotime("+1 month",strtotime($display_date))); ?>">>></a>と記述していて、その時の実際のURLはtop.php?first_day_of_month=2018-11-01となっています。このリンクのところの記述はそのままでwhereの箇所に$_GET()使うんですよね?
kaba

2018/10/16 11:15

SQL文にパラメータの記述がないのに$stmt -> bindParamを呼び出していることが間違っています。マニュアルを確認して修正したほうがいいです
takeke

2018/10/16 11:35

ありがとうございます!そこは確かにそうですね。参考サイトを元に作っていた当初whereの箇所がWHERE start_date BETWEEN :month_fast_day AND :next_month_fast_dayとしていたのですが、うまくデータがとれなかったので、試行錯誤して今の記述にしました。PHPマニュアルですね。知ってはいますがどこを読んだらいいのかわからなかったので読んでいませんでした><
m.ts10806

2018/10/16 21:13

pdo関係を一通り読めば良いかと。PHPマニュアルを確認せずにPHPを組むのは英和辞典なしに英語を勉強するのと同じです(別に電子辞書でも良いですが) 要は辞書みたいなもの、説明書なので、使い方を知りたい関数名で検索するのが通常です。見方を知らないとたぶん成長できません。必ずどこ にいっても「PHPマニュアル確認したか?」 は聞かれますよ
guest

回答1

0

$stmt->execute()の実行成否は戻り値なので、修正が必要です。

php

1/* 戻り値で成否を判定するよう修正する。 2 $stmt -> execute();//実行 3 if ( $stmt == false ){ 4*/ 5 if ( $stmt->execute() === false ){

また、$stmt->execute()がfalseを返した場合はデータが取得できなかったのではなく、構文エラー等によるものです。
$stmt->execute()の後の処理では、$stmt->fetch()で1行ずつ、もしくは$stmt->fetchALL()で全行を取得します。
各APIはphpのマニュアルに記載があるので、まずはそちらを参考にされると良いです。

投稿2018/10/14 12:38

kaba

総合スコア314

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

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

takeke

2018/10/14 16:45

回答ありがとうございます! 全行ですと if ( $stmt->execute() === false ){$stmt->fetchALL();} という感じになりますか?
kaba

2018/10/15 00:42

$stmt->execute() の戻り値が真の場合、行が取得できます。 if ( $stmt->execute() ){ $rows = $stmt->fetchALL(); // 以後、$rowsを使った処理を記述する }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問