Я создал класс для обработки всех операций с базой данных для моего приложения. До сих пор я собирал и отображал данные в заявлениях foreach в моем представлении. То, что я хочу, это получить и установить отдельные элементы из функции из моего класса базы данных.Функция динамической базы данных для получения и настройки данных
Вот моя функция базы данных для отображения данных в Еогеаспе:
public function test($sql, $type, $param)
{
$variables = array();
$results = array();
// Mysqli
if($stmt = $this->AC->Mysqli->prepare($sql))
{
$params = array_merge($type, $param);
call_user_func_array(array($stmt, 'bind_param'), $this->make_values_referenced($params));
$stmt->execute();
$stmt->store_result();
// Existance
if($stmt->num_rows > 0)
{
$meta = $stmt->result_metadata();
while($field = $meta->fetch_field())
{
$parameters[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $parameters);
while($stmt->fetch())
{
$elemet = array();
foreach($row as $key => $val)
{
$element[$key] = $val;
}
$results[] = $element;
}
return $results;
}
else
{
$results = FALSE;
return $results;
}
}
else
{
die("ERROR: We could not connect.");
}
}
Функция ниже вызывается из моей модели:
public function profile_information($account_name)
{
// Mysqli Variables
$sql = "SELECT $this->account_details.bio
FROM account_details
WHERE $this->account_details.account_name = ? LIMIT 10";
$type = array("s");
$param = array($account_name);
$results = $this->AC->Database->prepared_select_loop($sql, $type, $param);
$this->AC->Template->set_data('profile_information', $results, FALSE);
}
После установки в моей модели, я вызываю функцию в мой контроллер и получить доступ к нему в моем представлении с помощью foreach для отображения данных:
$profile_information = $this->get_data('profile_information');
foreach ($profile_information as $row) :
//Displaying data here
endforeach;
Вышеописанное прекрасно подходит для отображения большого количества данных, но то, что я хочу сделать, это вызвать функцию базы данных, которая позволит мне установить отдельные элементы данных. Поэтому не нужно использовать foreach, если im только получает ограниченный объем данных (например, один ряд Имя, возраст, адрес)
Нединамический способ, с которым я столкнулся, состоит в том, чтобы написать базу данных для каждой функции, желаю одну строки из базы данных:
function name($variable)
{
$sql = 'statement here';
$stmt = $this->AC->Mysqli->prepare($sql);
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result(bind results);
$stmt->fetch();
$this->AC->Template->set_data('id', $id);
$this->AC->Template->set_data('account_name', $account_name);
}
Так что в основном я хочу сделать вышеуказанное заявление рефакторинга в мой класс базы данных и, таким образом, делая его более динамичным.
Я не знаю, как я смогу решить эту проблему, я не хочу использовать PDO, поскольку я хочу найти решение в Mysqli. Любая помощь будет оценена по достоинству.
вашей идея объединения API базы данных с вызовами шаблонов в один функция выглядит ошибочно ... необычно для меня. Однако, я желаю вам удачи. Mysqli особенно злой с динамическими подготовленными заявлениями. Если вам не нравятся однострочные PDO, несколько экранов кода mysqli - лучший выбор. –
Вы бы порекомендовали просто переключиться на PDO? – HireLee