我完全MCH和MJH意見一致,但是,只有在情況下,你真的想有一個「BD驅動器」(和建立它自己),我會爲每個查詢使用不同的名稱,非常具體的名稱 ,因爲你需要確切地知道一個函數會返回給你。
所以,如果我是你,我會使用的名字,如getAllUsers
,getUserById
,getAllUsersOnlyPersonalData
,getUserByIdOnlyPersonalData
,getAllUsersOnlyContactData
等(固定字段和篩選器每個方法)。
請注意,在您的示例中,您沒有使用任何$ id變量,因此您總是收到用戶列表。
關於查詢的方法,有很多方法可以做到這一點。就個人而言,我更喜歡MySQLi面向對象的準備語句,因爲它安全,簡單並且當前非常廣泛,所以我將僅用它來示例。
你的職能是這樣的:
<?php
class DBDriver{
function openConnection(){
// If you don't always use same credentials, pass them by params
$servername = "localhost";
$username = "username";
$password = "password";
$database = "database";
// Create connection
$conn = new mysqli($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Return conection object
return $conn;
}
function closeConnection($conn){
$conn->close();
}
function getAllUsers(){ // We don't need ids here
$conn = $this->openConnection();
// Array of arrays to store the results
// You can use any other method you want to return them
$resultsArray = [];
$sqlQuery = "SELECT * FROM users";
// In this case it's not neccesary to use prepared statements because we aren't binding any param but we'll use it to unify the method
if ($stmt = $conn->prepare($sqlQuery)) {
// Execute query
$stmt->execute();
// Bind result variables (I don't know your actuall column names)
$stmt->bind_result($id, $name, $email, $phone, $birthdate);
// Fetch values
while ($stmt->fetch()) {
$resultsArray[] = [$id, $name, $email, $phone, $birthdate];
}
// Close statement
$stmt->close();
}
$this->closeConnection($conn);
// If no results, it returns an empty array
return $resultsArray;
}
function getUserByIdOnlyContactData ($userId){
$conn = $this->openConnection();
// Array to store the results (only one row in this case)
$resultsArray = [];
$sqlQuery = "SELECT name, email, phone FROM users WHERE id = ?";
if ($stmt = $conn->prepare($sqlQuery)) {
// Bind parameter $userId to "?" marker in $sqlQuery
$stmt->bind_param("i", $userId);
$stmt->execute();
$stmt->bind_result($name, $email, $phone);
// If id found
if ($stmt->fetch()) {
$resultsArray = [$name, $email, $phone];
}
// Close statement
$stmt->close();
}
$this->closeConnection($conn);
return $resultsArray;
}
function getAllUserOnlyBirthdayDataOrderByBirthday(){
$conn = $this->openConnection();
$resultsArray = [];
$sqlQuery = "SELECT id, name, birthdate FROM users ORDER BY birthdate";
if ($stmt = $conn->prepare($sqlQuery)) {
$stmt->execute();
$stmt->bind_result($id, $name, $birthdate);
while ($stmt->fetch()) {
$resultsArray[] = [$id, $name, $birthdate];
}
// Close statement
$stmt->close();
}
$this->closeConnection($conn);
return $resultsArray;
}
} // Class end
這樣,這是真的,你將有很多的根據您的要求的功能,但你可以看到它是非常容易增加新的或修改它們(和你不會因同一功能中的許多不同選項而生氣)。
希望這可以幫助你組織你的數據庫驅動程序!
然後進入幫助存儲過程。您可以使用存儲過程保持php代碼清潔。 –
您可以放棄第二個查詢,因爲第三個查詢涵蓋了第二個查詢的行爲。不知道你是否需要在這裏存儲過程,你想提取的信息的邏輯必須在某個地方。 –
我看到你來自哪裏,我的舊數據庫驅動程序具有所有這些以及準備好的語句,緩存和大量的實用函數,但它們非常複雜以至於很少使用它。相反,它現在是一個複製粘貼筆記本,我只需要獲取任何當前項目所需的代碼部分。如果你有一個完整的後續設計的巨大項目,這種改進只有意義。在這種情況下,你會知道要實現什麼功能,以及要拋棄什麼。否則,你會得到一個超級複雜的數據庫驅動程序,可以做「一切」,但只能使用它的兩個部分。 – mch