2012-07-03 43 views
0

我有一個自定義html頁面,發佈到php變量,然後填寫自定義sql查詢。動態插入MySQL-PHP組合

function load_table($db, $old_table, $startRow, $nameColumn, $ipColumn, $addressColumn, $cityColumn, $stateColumn, $zipColumn, $countryColumn) 
{ 
$select = "SELECT $nameColumn, $ipColumn, $addressColumn, $cityColumn, $stateColumn, $zipColumn, $countryColumn FROM " .$old_table.";"; 
$q = mysqli_query($db, $select); 

return $q; 
} 

它完美,當所有的變量都拿着價值,但我需要一種方法來動態地斷言此查詢,因此,如果用戶缺少一列,即郵政編碼是不是在他們的桌子,它仍然會運行而不會破壞查詢。在一個陣列

回答

2
$array = array(); 

if ($nameColumn) 
    $array[] = $nameColumn; 
if ($ipColumn) 
    $array[] = $ipColumn; 

// etc... 

$cols = implode(',', $array); 

if ($cols) 
{ 
    $select = "SELECT $cols FROM $old_table;"; 
    $q = mysqli_query($db, $select); 
    return $q; 
} 
+0

這是做這件事的正確方法。 – Mahn

+0

我還沒有嘗試,但這是最有意義的!非常感謝! – GK1667

+1

實際上,這可以通過使用funci_get_args來改進,正如Falci指出的那樣。 – Mahn

1

把你所有的變量,然後執行以下操作:

function load_table($db, $old_table, $startRow, array $columns) { 
    $columns = array_filter($columns, 'strlen'); // removes empty values 
    $select = "SELECT " . implode(",", $columns) . " FROM " .$old_table.";"; 
    $q = mysqli_query($db, $select); 
    return $q; 
} 
+0

*破滅( 「」,$ colums) – fehrlich

+0

@XzenTorXz感謝 – flec

+0

我不熟悉破滅功能。它是否簡單地從數組中刪除變量是空的? – GK1667

0

你可以給它一個默認:

function load_table($db, $old_table, $startRow, $nameColumn="Default name", $ipColumn, $addressColumn, $cityColumn, $stateColumn, $zipColumn, $countryColumn) 

在這種情況下$nameColumn將永遠有一個值,除非另有規定

+0

感謝您的回覆!這聽起來不錯,但我擔心的是,如果使用默認名稱,並且沒有擔保,表中將顯示默認名稱,則會發生錯誤,因爲它會嘗試查找該列名稱並且找不到它。除非一個默認名稱,我可以給它,它只會充當佔位符? – GK1667

2

或者您可以使用

$select = "SELECT ".(($nameColumn != '')?$nameColumn.",":"")." .......";