2017-07-24 72 views
0

我想清理大約15個網頁內的大量選擇查詢,我想用一個函數,然後我可以用它來調用所有不同的查詢和表,會減少一堆雜波。PHP/MYSQL查詢作爲多功能的功能

我遇到了一個問題,似乎無法找到一個方法來解決問題。

下面是函數:

function dbGet($conn, $table, $select, $where, $cond) { 
    require($conn); 
    if ($stmt = $db->prepare(" SELECT $select FROM `" . $table . "` WHERE $where=? ")) { 
     $stmt->bind_param("i", $cond); 
     $stmt->execute(); 
     $result = $stmt->get_result(); 
     $rowNum = $result->num_rows; 

     if ($rowNum > 0) { 
     while($data = $result->fetch_assoc()){ 
      return $data; 
     } 
     } 
     $stmt->close(); 
    } else { 
     die($db->error); 
    } 
    $db->close(); 
} 

這裏是我如何調用各種不同頁面的功能:

$settings = dbGet('php/connect.php', 'settings', '*', 'userId', $sessionId); 
echo $settings->toName; 

我遇到的問題是,它只是顯示設置表中的第一條記錄。我認爲在函數中使用while循環會返回所有記錄。事實上,如果我爲$ data而不是return返回一個print_r,我會得到所有的記錄。我如何將所有記錄傳遞給返回的$ data以便在任何其他頁面中訪問?

或 如果你們碰巧對現有的功能有任何建議,我認爲這些功能是高度重視和真實的,我可以實現而不是自己寫,請告訴我。

謝謝。

+1

當你'return'時,實際上是在結束該循環的第一遍該功能。這就是爲什麼你只能看到第一條記錄。 – cteski

+0

@cteski如何才能實現這樣的功能,就像我之後的那個功能一樣?我想讓這個功能足夠靈活,我可以使用它在很多不同的情況下。 – Sergio

+0

而不是「返回」行,也許你想「屈服」他們?請參閱http://php.net/manual/en/language.generators.syntax.php。 – localheinz

回答

1

return被觸發時,該函數結束,並且其後的每一行代碼都不執行。如果你想延遲數據的返回,直到後面的函數中,然後創建一個變量,賦值,並在你準備好時返回變量。

例如,你可以調整你的代碼來創建一個數組$data,像這樣:

function dbGet($conn, $table, $select, $where, $cond) { 
    $data = array(); 
    ... 
    while ($row = $result->fetch_assoc()) { 
     $data[] = $row; 
    } 
    $stmt->close(); 
    ... 

    $db->close(); 

    return $data; 
} 
+0

工作!謝謝! – Sergio