2012-07-08 63 views
0

我有我的MySQL查詢有點麻煩PHP MYSQL語法

我有一個DB十足的產品,我有一個下拉菜單,它可以讓用戶選擇他們想什麼時間得到得到結果: -

  • 下拉
    • 早餐
    • 午餐
    • 晚報
    • 一中國日報 -

此刻我的發言是

SELECT * from DEALS WHERE timeofday='post data from form'; 

現在這工作正常,但與「隨時」選項,我想查詢能夠搜索的結果以上所有/任何一項。

我想也許是做一個IF語句的時候觸發關閉2個獨立的查詢,其中一個說,如果$_POST['timeofday'] == 'Anytime'然後脫火

SELECT * from DEALS where timeofday='Breakfast' 
OR timeofday='Lunch' OR timeofday='Evening'; 

否則只是做了正常的查詢,但不知道是否有可能只用一個聲明來做到這一點。

親切的問候

+0

刪除WHERE,「SELECT * FROM DEALS」 – Gntem 2012-07-08 11:13:57

+0

我懷疑你的代碼很容易被sql注入。 – 2012-07-08 11:18:12

+0

你怎麼知道?你能看到我的代碼嗎?我可能已經過濾了所有的變量; P。 – Adam 2012-07-08 11:20:03

回答

3
$query = 'SELECT * from DEALS'; 
if ($_POST['timeofday'] != 'Anytime') { 
    $query .= ' WHERE timeofday="' . $_POST['timeofday'] . '"'; 
} 

正如DCoder提到的,這種方法很容易受到SQL注入...您應該檢查/淨化輸入或使用準備好的語句。在這種情況下,有一組預定義的值,您可以:

$knownTimesOfDay = array('Breakfast', 'Lunch', 'Evening', 'Anytime'); 
if (!in_array($_POST['timeofday'])) { 
    die('Unsuppotred time of day... Did it really come from the form?'); 
} 
$query = 'SELECT * from DEALS'; 
if ($_POST['timeofday'] != 'Anytime') { 
    $query .= ' WHERE timeofday="' . $_POST['timeofday'] . '"'; 
} 
+0

這將是我的解決方案,這是實現這一目標的最佳方法嗎?我想看看是否有一個更優雅的方式來實現它:( – Adam 2012-07-08 11:16:24

+1

這是很容易SQL注入。我可以看到OP是熟悉它,但你應該明確提及它爲未來的讀者。 – DCoder 2012-07-08 11:25:54

0

不要以爲它可以在一個語句中完成。無論如何,你將不得不使用if語句。

+0

好吧,很酷。反饋,我不擅長SQL,所以認爲會有更好的方法。 – Adam 2012-07-08 11:17:35

0

,如果這些都爲一個timeofday的只有3個可能的值,那麼你可以,如果在PHP腳本這樣有:

if($_POST['timeofday'] != 'Anytime') 
    sql .= "where timeofday='".$_POST['timeofday']."'"; 
0

這可能最終取決於你在有項目是負數表,但是你可以使用:

SELECT * from DEALS where timeofday LIKE '%{$post_data}%' 

這將返回所有結果從timeofday如果$ post_data是一個空字符串。