php - 更新存储过程中的数组数据

标签 php mysql codeigniter stored-procedures insert-update

所以这是我的问题。我知道这个网站上有很多关于此类问题的文献,但我对其中几个问题如何与我的问题交织在一起感到困惑。首先,我有一个行数据数组,需要根据该数组中的远程 id 值(在本例中为 value_c)更新或插入该数组。该数组对应于表 foo 中的行实例。基本上,如果数据库中存在具有匹配 value_c 的记录,则更新该记录,否则插入新记录负载。该数组的数据结构对应于我们数据库中表 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 表很可能会被扩展,而且我不想进一步制造错误。有没有一种方法可以动态地将数组的字符串表示形式的解析分离内容放入单个更新或插入语句中。我不确定这是否可能,但我觉得可能存在一种我不知道的解决方法。谢谢您的帮助。

最佳答案

这不是一个明确的答案,但它是一个尝试的选择。

如果您想避免在过程中发送许多参数,您可以创建一个名为 foos_tmp 的表,其结构与 foos 相同,但多了一个字段 id_foos_tmp (pk 和自动增量)并将数组输入表 foos_tmp 中。然后,您仅发送生成的表 foos_tmpid_foos_tmp ,并在内部执行 SELECT foos_tmp 表并获取您生成的数据的过程之前在数组中。

希望对您有所帮助。

问候。

关于php - 更新存储过程中的数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13592990/

相关文章:

php - 大文件上传

mysql - 在 CodeIgniter Activerecord 中检索 where 子句

mysql - 使用 insert_batch 插入数据

mysql - 如何从生产 MySQL 中删除大量行/数据

c# - 考虑到必须从数据库中获取答案,如何从多个单选按钮检查正确答案

php - PDOStatement::fetchAll() 期望参数 1 很长,给定字符串吗?

php - 代码点火器 : how to upload more than one image with codeigniter

php - mysqli 计算具有特定值的行

php - 如何将 CMS 页面的内容拉入静态 block ?

javascript - div 中的日期选择器在 ajax 调用后无法正常工作