views:

33

answers:

1

I have a fairly simple insert statement

<...>
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)));
                    }
                }
            }
        }
<...>

The odd thing is only one or two of the rows are being inserted. I put that echo line in to see the row id's it was returning for each insert since I'm not getting any errors. If for example I insert three items it will return something like 18, 124, 128. Where the 18 id is the next and expected id so this row gets inserted and then the rest don't. Any ideas what might be wrong?

+1  A: 

You are changing the value of $sql inside your second if statement. 124 and 128 is attributes from the attr_values table. Consider using another variable name inside your if statement, or move the first assignment to $sql inside the foreach loop (move it down one line).

Emil Vikström
Haha... yeah I just noticed that. Gotta love stupid mistakes. Thanks.
blcArmadillo