2017-09-01 10 views
0

私のMySQLデータベースでは、私は08/31/2017のような形式の日付を持つ多くのレコードを持っています。これはMySQLの列に "text"として保存されています。私のhtml &のPHPスクリプトでMySQLの日付選択クエリdoesnt work

、私は、正常に動作し、私は

<select name='day'> 

と私のPHPスクリプト内でそれを保存しています次のスクリプトを使用してHTMLにダウン選択ドロップとして、すべてのこれらの日付を使用しています私は..私は、次を使用していますし、クエリが動作していない..

をmysqlのクエリで

$day = isset($_GET['day']) ? $_GET['day']:'08/31/2017'; 

を最初に設定されていない場合は、日付を選択するには、以下を使用しています

、それは文字列値であるため、クエリで$day変数を囲む引用符(')を追加

+1

1)現在のクエリ構築方法を使用して$ dayを引用する必要があります。しかし、2)あなたは本当に安全でない入力を逃れるべきです。 – trex005

+1

** 1日目:テキストとしてではなく日付として日付を保存します。 – JYoThI

+1

@ trex005パラメータバインディング>エスケープ – Phil

答えて

0

てみてください..私はクエリで日付を使用いけない場合right..myスクリプトが正常に動作しないもの助けてください

以下のように実行します -

$result=$dbconnect->query("SELECT * FROM testtable where (`HR` = $hr and `DAY` = '$day') ORDER BY `HR` DESC"); 
+0

ステートメントだけでなく、何らかのコードでサポートされている有用な答えを提供しようとします。 –

+0

恐ろしい男..それは正しい答えです:) – Syed

0

変更データ型をMySQLでの日付エントリのdateに... を次に、あなたのPHPコードでは、次の操作を行います。

$date1 = date_create($_GET['day']); 

$date = date_format($date1, 'm/d/Y'); 

そして、それをあなたの質問に渡してください。

そして、プリペアドステートメントを使用すると、非常に

0

をお勧めしますが、問題は、$の時間と$日はエスケープで囲まする必要があることなど、SQLクエリである

SELECT * FROM testtable where (`HR` = $hr and `DAY` = DATE('$day')) ORDER BY `HR` DESC 
0

この文字列で検索してください引用符。

ユーザーが提供するデータは信頼できません。そのようなデータに対処する一つの方法は、SQLインジェクションを防ぐために準備されたステートメントを使用することであるが、一つは、慎重にManualごととしての使用を検討する必要があります。プリペアドステートメントを使用して

が常に実行 の最も効率的な方法ではありませんステートメント。プリペアドステートメントは一度だけ実行されると、準備されていないステートメントよりも多くのクライアントとサーバーのラウンドトリップが発生します( )。

OWASPあたりいえ

、:まれに

、準備された文は、パフォーマンスに悪影響を与えることができます。 がこの状況に遭遇したときは、a)強く すべてのデータを検証するか、または準備されたステートメントを使用するのではなく、 のデータベースベンダー固有のエスケープルーチン を使用してすべてのユーザー入力をエスケープするかのいずれかです。だから、

、あなたはデータを検証してから、最低でも、次のように、mysqli_real_escape_stringを使用する必要があります。

<?php 
$hr = mysqli_real_escape_string($con, $_GET['hr']); 
$day = mysqli_real_escape_string($con, $_GET['day']); 

その後、クエリで変数$の時間と$一日を取り囲む引用符をエスケープ、など次のようになります。

$sql = "SELECT * FROM `date_hr` WHERE (HR=\"$hr\" and date=\"$day\") ORDER BY HR DESC"; 

$result = $dbconnect->query($sql);