0

私はかなり単純な挿入ステートメントを持っています

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

奇妙なことに、挿入される行は 1 つまたは 2 つだけです。エラーが発生していないため、そのエコー行を挿入して、挿入ごとに返された行IDを確認しました。たとえば、3 つの項目を挿入すると、18、124、128 のような値が返されます。18 の ID は次の期待される ID であるため、この行が挿入され、残りは挿入されません。何が間違っているのでしょうか?

4

1 に答える 1

1

2 番目のステートメント$sql内の値を変更しています。if124 と 128 はattr_valuesテーブルの属性です。ステートメント内で別の変数名を使用することを検討するifか、最初の割り当てをループ$sql内に移動します (1 行下に移動します)。foreach

于 2010-05-17T14:29:39.680 に答える