所以这是我的问题。我知道这个网站上有很多关于这类问题的文献,但我对这些问题中的几个如何与我的问题交织在一起感到困惑。首先,我有一个行数据数组,需要根据该数组中的远程 id 值更新或插入,在这种情况下value_c
。该数组对应于表 foo 中的一个行实例。基本上,如果数据库中存在匹配的记录,value_c
则更新该记录,否则插入新的记录有效负载。数组的数据结构对应于我们db中表foo的行模式。这是架构(为安全起见进行了混淆):
CREATE TABLE IF NOT EXISTS `foos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value_a` varchar(13) DEFAULT NULL,
`value_b` int(11) DEFAULT NULL,
`value_c` int(11) DEFAULT NULL,
.
.
.
.
`value_x` enum('enum_a','enum_b','enum_c','enum_d') DEFAULT NULL,
`value_y` text,
`value_z` enum('daily','monthly','weekly') DEFAULT NULL,
`value_aa` tinyint(4) NOT NULL,
`value_bb` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=829762 ;
有很多数据,计划如下。对这些数据进行字符串化处理,将其发送到存储过程,然后根据需要进行更新或插入。类似于以下内容(请注意,这将发生在 codeigniter 中的模型中):
public function update_or_insert($event_array_payload)
{
// string-ify the data
$mod_payload = implode('<delimiter>', $event_array_payload)
//deal with NULLs in array
$mod_payload = $this->deal_with_nulls($mod_payload);
$this->stored_procedure_lib->update_or_insert_payload($mod_payload);
}
// then elsewhere in the stored procedure library
public function update_or_insert_payload($foo)
{
$this->_CI->db->query('CALL update_or_insert_foo(\'$foo\')');
}
我的问题如下。单个字符串值被传递到存储过程中。然后需要将其解析并放入单个更新或单个插入语句中。我可以为表的每一列创建一个变量,并创建foo
一个循环来填充每个变量并以这种方式更新/插入,但是 foo 表很可能会被扩展,我不想进一步创建错误。有没有办法将数组的字符串表示的解析分开的内容动态放置到单个更新或插入语句中。我不确定这是否可能,但我觉得可能存在我不知道的解决方法。感谢您的帮助。