0

我创建了一个类来处理我的应用程序的所有数据库操作。到目前为止,我已经在我的视图中收集并显示了 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;

上面的方法可以很好地显示大量数据,但我想要做的是调用一个数据库函数,它允许我设置单个数据元素。因此,如果我只获得有限数量的数据(即一行姓名、年龄、地址),则不必使用 foreach

我解决此问题的一种非动态方法是为每个只需要数据库中的一行的函数编写数据库:

    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 中找到解决方案。任何帮助,将不胜感激。

4

1 回答 1

1

你会建议只切换到 PDO 吗?

确实。

整个函数test()可以重写为三行(假设 $param 包含一个数组,其中包含准备好的语句的参数):

public function test($sql, $param)
{
    $stmt = $this->AC->pdo->prepare($sql);
    $stmt->execute($param);  
    return $stmt->fetchAll();
}
于 2013-03-11T19:39:42.477 回答