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

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

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

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

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回答

5856閲覧

phpでの日付の範囲検索機能を実装したい!

tech_first

総合スコア13

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

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

PHP

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

0グッド

0クリップ

投稿2020/04/24 15:04

###phpを使って日付の範囲検索を行いたいです。

php(FWなし)で、日付の範囲検索を実装しております。
var_dump($day)で値は取り出せるのですが、範囲内のデータが取り出せません。

###ソースコード

php

1 2if ($_SERVER['REQUEST_METHOD'] === 'POST') { 3 4 if (!empty(filter_input(INPUT_POST, 'day'))) { 5 $day = filter_input(INPUT_POST, 'day'); 6 $dayAfter = filter_input(INPUT_POST, 'dayAfter'); 7 try { 8 $pdo = new PDO('mysql:host=localhost;dbname=test_db;charset=utf8', 'root', 'password'); 9 $sql = "SELECT name FROM news WHERE day BETWEEN :day AND :dayAfter "; 10 var_dump($day); 11 var_dump($dayAfter); 12 //ここで範囲指定したい値は取得できています。 13 $stmt = $pdo->prepare('SELECT * FROM news WHERE day BETWEEN :day AND :dayAfter'); 14 $stmt->bindParam(':day', $day); 15      //恥ずかしながら上記の記述が分かりません。マニュアルでは「PHP 変数を SQL 文のパラメータにバインドする」とありますが、変数$dayをdbのdayカラムにバインドする(つなげる)ということでしょうか? 16 $stmt->execute(); 17 $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 18 } catch (PDOException $exception) { 19 echo $exception->getMessage(); 20 exit(); 21 } 22 } 23} 24

そして$dayと$dayAfterの値をこちらのソースコードから挿入しています。

php

1 2<div class="day"> 3 <form action='' method='post'> 4 <select name="year1"> 5 <option value="">--</option> 6 <?php foreach(range(1920,2016) as $year): ?> 7 <option value="<?=$year?>"><?=$year?></option> 8 <?php endforeach; ?> 9 </select> 10 <select name="month1"> 11 <option value="">--</option> 12 <?php foreach(range(1,12) as $month): ?> 13 <option value="<?=str_pad($month,2,0,STR_PAD_LEFT)?>"><?=$month?></option> 14 <?php endforeach; ?> 15 </select> 16 <select name="date1"> 17 <option value="">--</option> 18 <?php foreach(range(1,31) as $day): ?> 19 <option value="<?=str_pad($day,2,0,STR_PAD_LEFT)?>"><?=$day?></option> 20 <?php endforeach; ?> 21 </select> 22 23 <select name="year"> 24 <option value="">--</option> 25 <?php foreach(range(1920,2016) as $year): ?> 26 <option value="<?=$year?>"><?=$year?></option> 27 <?php endforeach; ?> 28 </select> 29 <select name="month"> 30 <option value="">--</option> 31 <?php foreach(range(1,12) as $month): ?> 32 <option value="<?=str_pad($month,2,0,STR_PAD_LEFT)?>"><?=$month?></option> 33 <?php endforeach; ?> 34 </select> 35 <select name="date"> 36 <option value="">--</option> 37 <?php foreach(range(1,31) as $day): ?> 38 <option value="<?=str_pad($day,2,0,STR_PAD_LEFT)?>"><?=$day?></option> 39 <?php endforeach; ?> 40 </select> 41 <input type="hidden" name="day" value="<?php echo $_POST['year1'].'-'. $_POST['month1'].'-'. $_POST['date1']; ?>"> 42 <input type="hidden" name="dayAfter" value="<?php echo $_POST['year'].'-'. $_POST['month'].'-'. $_POST['date']; ?>"> 43 <input type="submit" value="検索"> 44 </form> 45 </div>

こちら使って値を入力しております。

値の入力→値を使って範囲指定→指定した範囲の値を表示

この流れの中の「値を使って範囲指定」

が上手くいきません。

###行ったこと

1.var_dumpdで値の確認
2.dayのデータ型をdateに変更

###バージョンやFW

FWは使っていません。
phpのバージョンは7.1

どうか、お願い致します。

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

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

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

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

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

m.ts10806

2020/04/24 15:11

ふと思ったんですが >(FWなし) とか書かなくて良いのでは? タグで分かります。 「絶対にフレームワーク使わなきゃダメ」なんてことはないので。
tech_first

2020/04/24 15:24

すみません。 最初のテンプレートに載っていたので、思考停止して書いておりました。 以後気をつけます。
m.ts10806

2020/04/24 21:32

質問は編集できます。 。
guest

回答1

0

ベストアンサー

「PHP 変数を SQL 文のパラメータにバインドする」

「バインド」は「関連付ける」「紐づける」という意味になります。
バインド (bind)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

また「変数」はあくまで「任意の値を保管した任意の名前がついた箱」です。

ですので、別に$dayなんて名前がついてなくても良いのです。

バインドの対象はあくまで、bindParam()の第1引数とprepareにセットされたSQLに書かれているパラメータの名前。

第2引数はそのパラメータに「どんな情報を関連付けるか」
なので変数でなくても固定でも良いのです。変数名は関係ありません。

※ただ共通機能を作る際に、変数名を紐づけるような実装をすることもありますが、PHPの機能と言うよりフレームワーク的な階層の話です

データベース関連であれば、よく参照されるのは下記の記事です。
PHPでデータベースに接続するときのまとめ
※最終更新が1年以上前ですが、内容に問題はないと思います。気になるのでしたら適宜PHPマニュアル参照してください。

投稿2020/04/24 15:18

m.ts10806

総合スコア80875

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

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

tech_first

2020/04/25 04:48

ありがとうございました! URLまで記載いただきご丁寧にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問