Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于MySQL表通过PHP创建空白记录_Php_Mysql_Codeigniter - Fatal编程技术网

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

基于MySQL表通过PHP创建空白记录,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个自制的LAMP应用程序,根据传递的是空白记录还是非空白记录,“修改记录”和“新记录”页面使用相同的HTML代码。目前,我通过从MySQL表中选择单个记录并手动设置每个字段(按名称)为空来创建空白记录。肯定有更好的方法可以做到这一点,但我需要的搜索词实在太通用了。我曾经考虑过使用mysql\u fetch\u数组或get\u class\u vars之类的东西,但我就是不能让它们工作。以下是我试图用少一点手工的东西来代替的东西: // Select a row, any row... (u

我有一个自制的LAMP应用程序,根据传递的是空白记录还是非空白记录,“修改记录”和“新记录”页面使用相同的HTML代码。目前,我通过从MySQL表中选择单个记录并手动设置每个字段(按名称)为空来创建空白记录。肯定有更好的方法可以做到这一点,但我需要的搜索词实在太通用了。我曾经考虑过使用mysql\u fetch\u数组或get\u class\u 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;
...

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

如果只得到一行,最好使用->row()方法,而不是results()&无用的foreach循环

e、 g:

现在开始解决您的问题,您必须定义您正在使用的字段

$fields = array('id', 'name', '...etc');
然后,如果不可用,您将执行类似的操作以清空

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

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

我相信您正是这样做的:

$data[0]=(对象)数组填充键($this->db->list\u fields('your\u table\u name'),null);

参考资料:,

你为什么要空行?不清楚你想达到什么目的。这个代码片段的预期结果是什么?您打算如何使用它?为什么不创建一个stdClass对象呢?我将尝试澄清一下:我正在向HTML表单传递一条记录。如果该记录非空,则表单假定用户正在编辑现有记录。如果该记录为空,则表单假定用户正在创建新记录。这使我能够在两种情况下都使用类似代码的工作,而不是使用两批不同的HTML代码;一个用于“修改”,一个用于“新建”。这一切都很好。我试图避免的是每次向数据库添加列时都必须手动创建一个新属性或清空一个新的选定列。这更清楚吗?记录编号是手动设置的还是通过php/mysql自动设置的?记录编号?我有一个自动递增的索引列,但在将数据插入表时会设置该列。这就是你要问的吗?手动$fields数组()就是我要解决的问题。。。是否无法使用检索到的$row的现有结构动态构建$fields数组(),而不提前知道列名(或者每次更改表时都必须编辑手动$fields数组())?另外,感谢row()方法提示。我知道必须有更好的方法来实现这一点,但我只是重新设计了一些现有代码来启动该函数,而且,由于它工作正常,因此从未返回并清理它。:-)如果不想手动执行,可以使用list_fields方法,类似于$fields=$this->db->list_fields('table_name');啊。。。我正在寻找一个通用的PHP解决方案,并没有考虑寻找一个特定的CodeIgniter解决方案。谢谢为了其他可能会遇到同样问题的人,有没有通用的PHP解决方案?@JohnStraffin嗯,通用的PHP解决方案可能需要实现他们自己的列表字段()。对于MySQL,它使用查询,然后遍历结果。绝对不是单线解决方案。
foreach ( $fields as $f ) $data[$f] = isset($row->$f) ? $row->$f : NULL;