2013-04-03 18 views
8

私は、mySQLデータベーステーブルのすべてをロードするhtmlテーブルを持っています。私はそのmySQLテーブルの列に関連するドロップダウンを持っています - ユーザーがAJAXを使用してデータベースを照会するドロップダウンの1つを選択すると。PHPの変数を使って動的なmysqlクエリを作成する

クエリを動的に作成する方法を理解する必要があります。その理由は、ドロップダウンが空になることがある(つまり、その列でフィルタリングしたくないためです)。

これを行うにはどのような方法が最適ですか?クエリが失敗した(というか、何も返さない) -

これらのフィールドのいずれかが空の場合、あなたが想像できる
$stationFilter = $_GET['station']; 
    $verticalFilter = $_GET['vertical']; 
    $creativeFilter = $_GET['creative']; 
    $weekFilter = $_GET['week'];  

    $result = mysql_query("SELECT * FROM $tableName WHERE STATION_NETWORK = '$stationFilter' AND VERTICAL = '$verticalFilter' AND CREATIVE = '$creativeFilter' AND WK = '$weekFilter'"); 
    $data = array(); 
    while ($row = mysql_fetch_row($result)) 
     { 
     $data[] = $row; 
     } 
    $finalarray['rowdata'] = $data; 

が原因で動作しません:

現在、私はこのようなものを持っています。

明らかに、このような '静的な'クエリを作成すると、特定の変数が空の場合は難しくなります。

空ではないものだけを入力するようにそのクエリを動的に作成する最良の方法は、適切なデータを正常に完了して表示できるようにするためです。

+0

を試してみてください? –

+1

mysql_queryは使用しないでください。廃止予定です。また、あなたはSQLインジェクションに挑戦しています。 – Jonast92

+0

今私はそれを稼動させることに心配しています。これは、イントラネット専用であり、イントラネット用です。それは決して外の世界を見ることはありません。懸念してくれてありがとう、それは私が気づいているが、私はちょうどこの作業を得ることができるかどうかを見たいと思っている。 – Hanny

答えて

29

変数に値が含まれていると、彼らがしなければ、そのようなクエリを構築する場合だけチェック:

unset($sql); 

if ($stationFilter) { 
    $sql[] = " STATION_NETWORK = '$stationFilter' "; 
} 
if ($verticalFilter) { 
    $sql[] = " VERTICAL = '$verticalFilter' "; 
} 

$query = "SELECT * FROM $tableName"; 

if (!empty($sql)) { 
    $query .= ' WHERE ' . implode(' AND ', $sql); 
} 

echo $query; 
// mysql_query($query); 
+0

私はそのようなものを考えましたが、どこについては? このステートメントは、最初のステートメントにはWHEREを含める必要がありますが、後続ステートメントにはANDを含める必要があります。それを行うための最善の方法は? – Hanny

+0

'$ sql'に何かが含まれているかどうかを確認してください。そうであれば、それを使用しますが、 '$ sql'を使う前に' WHERE'という言葉を付け加えてください。 – SeanWM

+0

私の編集をチェックしてください.. – SeanWM

0
$filter = array(); 

if ($_GET['station'] != '') 
{ $filter[] = 'STATION_NETWORK = '.$_GET['station'];} 
if ($_GET['vertical'] != '') 
{ $filter[] = 'VERTICAL = '.$_GET['vertical'];} 
if ($_GET['creative'] != '') 
{ $filter[] = 'CREATIVE = '.$_GET['creative'];} 
if ($_GET['week'] != '') 
{ $filter[] = 'WK = '.$_GET['week'];} 

$query = 'SELECT * FROM $tableName WHERE '.implode(' AND ', $filter); 
$result = mysql_query($query); 
... 

いますが、テーブルの列の名前を押しGETであればより良いです。 $ _GET ['STATION_NETWORK'] ---このようなものもあります。

then you make 
foreach ($_GET as $key => $value) 
{ 
    if ($value != '') 
    { $filter[] = $key.' = '.$value;} 
} 

か、ドロップダウンが空になったときに間違っているかを見るためにあなたのクエリをエコーし​​ていないのはなぜ

$filter = array('STANTION_NETWORK' => $_GET['station'], 
       'VERTICAL' => $_GET['vertical'], 
       'CREATIVE' => $_GET['creative'], 
       'WK' => $_GET['week']); 
$query_array = array(); 

foreach ($filter as $key => $value) 
{ 
    if ($value != '') 
    { $query_array[] = $key.' = '.$value;} 
} 
$query = 'SELECT * FROM $tableName WHERE '.implode(' AND ', $query_array); 
$result = mysql_query($query); 
関連する問題