Я полностью согласен с комментариями 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-код с помощью хранимых процедур. –
Вы можете отказаться от второго запроса, потому что третий покрывает поведение второй. Не уверен, что вам нужно сохранить procs здесь, логика для информации, которую вы хотите извлечь, должна быть где-то. –
Я вижу, откуда вы родом, мой старый драйвер db имеет все это плюс подготовленные заявления, кеширование и множество функций полезности, но получил настолько сложный, что я редко его использую. Вместо этого теперь это копировальный блок, в котором я просто беру необходимые для любого проекта компоненты кода. Это уточнение имеет смысл, если у вас есть огромный проект с тщательным последующим дизайном. В этом случае вы будете знать, какую функциональность реализовать, и что не учитывать. В противном случае вы получите суперкомплексный драйвер DB, который может «все», но только когда-либо использовать 2 части из него. – mch