2017-02-20 56 views
0

我想傳遞一個數組列數不同的列名和查詢數據庫的表。傳遞一個數組到一個函數來查詢數據庫中的PP

public function get_list() { 

    $list = func_get_args(); 
    $table = array_pop($list); 
    $fields = implode(', ', $list); 

    $sql = "SELECT $fields FROM $table"; 
    $data = array(); 
    try { 
     $dbi = db::getInstance(); 
     $stmt = $dbi->data->prepare($sql); 
     $stmt->execute(); 
     while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     $data[]=$row[$fields]; 
     } 
     return $data;  
    } 
    catch(PDOException $ex) { 
     die($ex); 
    } 
    } 

查詢得到表和右列,如果只有一列。 但是,如果陣列包括多列,它說:

未定義指數:值1,值

有沒有用逗號分隔的字符串來查詢多個列的有效方法?

非常感謝!

+2

'$ data [] = $ row;' – AbraCadaver

回答

1

不知道你想用循環中的$fields做什麼。您的查詢將只返回您指定的字段。所以你的代碼是:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    $data[] = $row; 
} 

但是,這裏有兩種方法來獲取您顯示的數據。剛分配的循環:

while ($data[] = $stmt->fetch(PDO::FETCH_ASSOC)) {} 

或者用一個函數來獲取所有行:

$data = $stmt->fetchAll(PDO::FETCH_ASSOC); 

但是,如果我要利用這個方法,我將通過在表中的字段(如數組)作爲指定的參數:

public function get_list($table, $fields) 

要使用動態字段的功能之外的結果,你會需要循環$rows讓他們:

foreach ($this->model->get_list($fields, $table) as $row) { 
    foreach ($row as $field => $value) { 
     echo "$field contains $value"; 
    } 
} 
+0

我試着返回一個數組來循環主函數。像這樣:'foreach($ this-> model-> get_list($ field,$ table)as $ row){echo $ row;}'你能告訴我做到這一點的最好方法 –

+0

Ahhhh!現在我懂了!非常感謝! –

+0

你似乎對這個功能感到困惑。你知道一個更好的方法將不同數量的列名傳遞給一個返回數據庫查詢結果的函數嗎? –

相關問題