我有一个自行开发的 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;
...
我知道这是一个肮脏的黑客,但它有效。什么是"正确"的方法?
我相信
你正在这样做:
$data[0] = (object) array_fill_keys($this->db->list_fields('your_table_name'), null);
参考: CI->db->list_fields(), array_fill_keys(), 类型转换
如果你只得到 1 行,你最好使用 ->row() 方法而不是 resuls() 和无用的 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中可用,以便您可以将其传递给视图。