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


Create a blank record via PHP based on MySQL table

我有一个自行开发的 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中可用,以便您可以将其传递给视图。