Странное поведение вставки с mysql и codeginiter - PullRequest
0 голосов
/ 17 мая 2010

У меня довольно простое выражение вставки

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

Странно, только одна или две строки вставляются. Я вставил эту строку эха, чтобы увидеть идентификаторы строк, которые она возвращала для каждой вставки, так как я не получаю никаких ошибок. Например, если я вставлю три элемента, он вернет что-то вроде 18, 124, 128. Где идентификатор 18 - следующий и ожидаемый идентификатор, поэтому эта строка вставляется, а остальные нет. Есть идеи, что может быть не так?

1 Ответ

1 голос
/ 17 мая 2010

Вы изменяете значение $sql в своем втором if утверждении. 124 и 128 - это атрибуты из таблицы attr_values. Попробуйте использовать другое имя переменной внутри оператора if или переместите первое присваивание в $sql внутри цикла foreach (переместите его на одну строку вниз).

...