2017-11-28 33 views
0

で私が入力Date.This入力テキストがデータベースで検索され、結果は構文によって取得される与えることができ、ユーザーに検索ボックスを持っている...MySQLとPHPの検索結果

3検索ボックスがあります。注文番号、注文番号&日付私は日付検索のみにしたい。したがって、この2017年8月24日1時08分27秒

等datebaseで
$sno = 1; 
$userID = $_SESSION["loginID"]; 

if(isset($_REQUEST["Submit2"]) || isset($_REQUEST["Submit22"]) || isset($_REQUEST["Submit222"])) 
{ 
    $dName = mysql_real_escape_string($_REQUEST["dName"]); 
    $qNumber = mysql_real_escape_string($_REQUEST["qNumber"]); 
    $qDate = mysql_real_escape_string($_REQUEST["qDate"]); 

    if ($qDate!="") { 
     $SQL = "SELECT * FROM orders WHERE oDate = '".$qDate."' AND orderType='Order' ORDER BY orderNum DESC"; 
    }elseif ($qNumber!="") { 
     $SQL = "SELECT * FROM orders WHERE orderNo LIKE '%".$qNumber."%' AND orderType='Order' ORDER BY orderNum DESC"; 
    }elseif ($dName!="") { 
     $SQL = "SELECT * FROM orders WHERE designName = '".$dName."' AND orderType='Order' ORDER BY orderNum DESC"; 
    } 

}else{ 
    $SQL = "SELECT * FROM orders WHERE orderType='order' AND userID = '".$userID."' ORDER BY SNo DESC"; 
} 
$SQLRes=mysql_query($SQL); 

任意の順序日付値iは、ボックス2017年8月24日1時08分27秒でその作業を同じ入力を入力します。私は検索ボックス2017または2017-08に入力して似たように検索したいので、似たような入力をしていない月や年のデータを取得できます。 DATETIME範囲の

+2

、* [ 'mysql_'コンストラクタがありますのでご注意ください* PHP 5.5 [**](https://wiki.php.net/rfc/mysql_deprecation)で廃止され、[PHP 7 **で削除されました](https://wiki.php.net/rfc/ remove_deprecated_functionality_in_php7#extmysql)。 [** MySQLi **](http://php.net/manual/en/book.mysqli.php)または[** PDO **](http:// php。net/manual/en/book.pdo.php)、[** prepared statements **](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使って[** SQLインジェクション**](https://en.wikipedia.org/wiki/SQL_injection)を防ぐ: –

+0

私はこれをPHP 5.3.0で使用しています。この要件の正しいクエリが必要です。 – Aayaan

+0

PHP 5.3 was was [**廃止**](http://php.net/eol.php)(2014年8月)(3年以上前)アップグレードを強くお勧めします*。 PHP 5.3.0 **単独**には、[** 97のセキュリティ上の脆弱性**](https://www.cvedetails.com/vulnerability-list/vendor_id-74/product_id-128/version_id-82589/PHP-PHP- 5.3.0.html)(その多くは重要です)。誰かがあなたのテーブルをDROPできるだけでなく、リモートから任意のコードを実行することさえできます。あなたは正しいクエリが必要なだけではありません。あなたのセキュリティは**遠すぎる**大きな懸念です。 –

答えて

0

規範的基準は

"2008" と一致するか、 "2008-は、" 一致する "2008-03"

WHERE 1=1 
    AND t.odate >= '2008-03-01' 
    AND t.odate < '2008-03-01' + INTERVAL 1 MONTH 

に一致するように

WHERE 1=1 
    AND t.odate >= '2008-01-01' 
    AND t.odate < '2008-01-01' + INTERVAL 1 YEAR 

だろう"2008-04-14"

WHERE 1=1 
    AND t.odate >= '2008-04-14' 
    AND t.odate < '2008-04-14' + INTERVAL 1 DAY 

これらの形式を使用すると、MySQLは適切なインデックスでレンジスキャンを効果的に使用できます。


我々は低迷パフォーマンスをしたい場合は、私たちはテーブルにに機能を評価するために、すべての行をMySQLを強制し、このような光調光クエリで文字列比較を行うことができます。

WHERE 1=1 
    AND DATE_FORMAT(t.odate,'%Y-%-m-%d %T') LIKE CONCAT('2008' ,'%') 

WHERE 1=1 
    AND DATE_FORMAT(t.odate,'%Y-%-m-%d %T') LIKE CONCAT('2008-04-14' ,'%') 

(これはodateはない文字型DATETIMEデータ型として定義されていると仮定されている。)


PHP mysql_インタフェース機能は、(lont時間)非推奨、そして最終的にPHPの最新バージョンでは削除されています。

新しい開発には、mysqli_またはPDOを使用する必要があります。

また、繰り返しコードが多いようです。クエリが常に同じ方法で開始するように見えます。 WHERE句とORDER BY句にはどのような変更が加えられましたか?あなたはとてもあなたの日付の検索クエリがどのように見えるはずですMySQLの機能year()month()を使用する必要があります

$SQL = "SELECT t.* FROM orders t WHERE 1=1" ; 

    if(somecond) { 
     $SQL .= " AND t.designname = ?"; 
    } 
    if(someothercond) { 
     $SQL .= " AND t.orderNo LIKE CONCAT('%', ? ,'%')"; 
    } 

    if (somethingelse) { 
     $SQL .= " ORDER BY t.orderNum DESC"; 
    } 
    else { 
     $SQL .= " ORDER BY t.sNo DESC"; 
    } 

    // for debugging, display the generated SQL 
    //var_dump($SQL); 

    $sth = $dbh->prepare($SQL); 
    if (somecond) { 
    $sth->bindValue($dname); 
    } 
    if (someothercond) { 
    $sth->bindValue($qNumber); 
    } 
+0

ありがとうスペンサー親愛なる。この質問をあなたの提案で更新してください。私は混乱しています。$ SQL = "SELECT * FROM orders oDate = '" $ qDate "AND orderType =' Order 'ORDER BY orderNum DESC"; – Aayaan

+0

助けてください? – Aayaan

0

:これはあなたの問題を解決するものではありませんが

$SQL = "SELECT * FROM orders WHERE (year(oDate) = year('".$qDate."') 
      OR (year(oDate) = year('".$qDate."') AND month(oDate) = month('".$qDate."'))) 
      AND orderType='Order' ORDER BY orderNum DESC"; 
+0

こんにちはshivgreありがとう、データベース検索では、TIMESTAMPタイプのSQL – Aayaan

+0

それはタイムスタンプ日付でも動作するはずです。日付がmysqlタイムスタンプ形式である限り、それは動作するはずです。 'SELECT YEAR( '2017-05-06 23:12:22');を確認するこのクエリを試してください。 'これは2017を返すはずです。 – shivgre

+0

myphpadminでこのクエリを実行します。SELECT YEAR( '2017-05-06 23:12:22');結果2017でもPHP検索のコード更新は機能していません – Aayaan

関連する問題