使用mysql和codeigniter进行奇怪的插入行为

时间:2010-05-17 14:18:55

标签: php mysql codeigniter lastinsertid

我有一个相当简单的插入语句

<...>
if (!empty($attributes)) {
            $sql = 'INSERT INTO `part_attrs` (`part_id`, `attr`, `type`, `list_order`) VALUES (?, ?, ?, ?)';
            foreach($attributes as $key => $attribute) {
                $this->db->query($sql, array($partid, $attribute[0], $attribute[1], $key));
                $attrid = $this->db->insert_id();
                echo $attrid.'<br />';

                if (strlen($attribute[2]) > 0) {
                    $values = explode(',', $attribute[2]);
                    $sql = 'INSERT INTO `attr_values` (`attr_id`, `field_values`) VALUES (?, ?)';
                    foreach ($values as $value) {
                        $this->db->query($sql, array($attrid, trim($value)));
                    }
                }
            }
        }
<...>

奇怪的是只插入了一两行。我把那个echo线放进来看看它为每个插入返回的行id,因为我没有收到任何错误。例如,如果我插入三个项目,它将返回类似18,124,128的内容。其中18 id是下一个和预期的id,因此该行被插入,然后其余的不被插入。什么想法可能是错的?

1 个答案:

答案 0 :(得分:1)

您正在更改第二个$sql语句中if的值。 124和128是来自attr_values表的属性。请考虑在if语句中使用其他变量名称,或将第一个分配移至$sql循环内的foreach(将其向下移动一行)。