基于MySQL表通过PHP创建空白记录

时间:2013-09-22 03:09:14

标签: php mysql codeigniter

我有一个本土的LAMP应用程序,根据是否传递空白记录或非空白记录,使用相同的HTML代码进行“修改记录”和“新记录”页面。目前,我通过从MySQL表中选择一条记录并手动将每个字段(按名称)设置为NULL来创建空白记录。必须有一个更好的方法来做到这一点,但找到我需要的搜索条件太过于通用。我看过使用像mysql_fetch_array或get_class_vars这样的东西,但我无法让它们起作用。这就是我试图用一些手册来代替的东西:

// Select a row, any row... (using CodeIgniter)
$q = $this->db->get($this->config->item('db'),1);
// For each ... um ... one ... row, add it to $data
foreach ($q->result() as $row) {
    $data[] = $row;
}
// set each **KNOWN** field to NULL
$data[0]->column1 = NULL;
$data[0]->column2 = NULL;
...

我知道这是一个肮脏的黑客,但它的确有效。这样做的“正确”方法是什么?

2 个答案:

答案 0 :(得分:1)

我相信你正是这样做的:

$data[0] = (object) array_fill_keys($this->db->list_fields('your_table_name'), null);

参考:CI->db->list_fields()array_fill_keys()type casting

答案 1 :(得分:0)

如果你只获得1行,你最好使用 - > row()方法而不是结果()&无用的foreach循环

例如:

$row = $this->db->select('*')->from('table')->get()->row();

立即解决您的问题,您必须定义您正在使用的字段

$fields = array('id', 'name', '...etc');

然后你会做这样的事情,如果不可用就变空了

foreach ( $fields as $f ) $data[$f] = isset($row->$f) ? $row->$f : NULL;

这将使您的$ data中的所有字段都可用,因此您可以将其传递给视图。