Использование подготовленных операторов для запроса базы данных в PHP заставляет меня повторять много кода.
Например, если я хочу получить конкретного пользователя из базы данных в моем файле users.php, я делаю это так:
$sql = "SELECT * FROM users WHERE id=?";
// prepare sql statement
$stmt = $conn->prepare($sql);
// bind query parameters
$stmt->bind_param('i', $user_id);
// execute
$stmt->execute();
// get result object
$result = $stmt->get_result();
// fetch user from result as associative array
$user = $result->fetch_assoc();
Для меня это уже большой код, предназначенный только для извлечения пользователя. Но ничего страшного, это более безопасно, поэтому оно того стоит.
Проблема возникает, когда я хочу вставить сообщение в базу данных в моем файле post.php. Я делаю это так:
$sql = "INSERT INTO posts SET user_id=?, title=?, body=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('iss', $user_id, $title, $body);
$result = $stmt->execute();
$stmt->close();
Я уже вижу повторение кода здесь. В моем приложении это означает, что если я хочу выполнить запрос к базе данных 100 раз, мне придется повторить некоторые строки кода, такие как prepare (), bind_param (), execute (), тем более что параметры bind_param () всегда меняются.
Я думал о рефакторинге в одной или двух функциях, скажем, в моем файле database.php, чтобы я мог просто вызвать функцию, передающую запрос и параметры, и заставить эту функцию выполнять все prepare (), bind_param () и функции execute ().
Возможно ли это? Если это так, то это хорошая практика?
Спасибо за любые предложения.