アプリケーションのすべてのデータベース操作を処理するクラスを作成しました。これまでのところ、ビュー内の foreach ステートメントでデータを収集して表示しました。私ができるようにしたいのは、データベース クラスの関数から個々の要素を取得および設定することです。
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;
上記は大量のデータを表示するのにうまく機能しますが、私がやりたいのは、個々のデータ要素を設定できるようにするデータベース関数を呼び出すことです。したがって、限られた量のデータ (つまり、名前、年齢、住所の 1 行) しか取得できない場合は、foreach を使用する必要はありません。
私がこの問題に取り組んだ非動的な方法は、データベースから 1 つの行のみを必要とする関数ごとにデータベースを作成することです。
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);
}
したがって、基本的には、上記のステートメントをデータベース クラスにリファクタリングして、より動的にしたいと考えています。
この問題にどのように取り組むことができるかわかりません。Mysqli 内で解決策を見つけたいので、PDO を使用したくありません。どんな助けでも大歓迎です。