2012-07-03 35 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.",":"")." .......";