Opencart:错误号码:1062重复输入' 1'关键' PRIMARY'

时间:2016-12-26 03:35:20

标签: php mysql opencart carousel

我正在为opencart开发一个carousel扩展,它包含Item ID,Item Name,Link,Image,Sort Order。旋转木马有问题,保存它会更改项目ID,所以我不得不修改代码以获取查询到DB的固定ID,但现在我得到了1062错误。

  

注意:错误:重复输入' 1'关键' PRIMARY'错误号码:1062   INSERT INTO crousal SET crousal_id =' 1',name =' Baby&玩具',link =   ' /index.php?route = product / product& product_id = 7570',image =   ' data / carousel / banner2.jpg',sort_order =' 0'在   第49行/home/user/public_html/system/database/mysql.php

分享model / carousel.php editCarousel函数

public function editCrousal($crousal_image) {

    $crousal_id = $this->db->getLastId();

    $this->db->query("DELETE FROM " . DB_PREFIX . "mobiapp_crousal WHERE crousal_id = '" . (int)$crousal_id . "'");

    if (isset($crousal_image['crousal_image'])) {
        foreach ($crousal_image['crousal_image'] as $crousal_image) {

            $this->db->query("INSERT INTO " . DB_PREFIX . "mobiapp_crousal SET  crousal_id = '" . (int)$crousal_id . "', name = '" .  $this->db->escape($crousal_image['name']) . "', link = '" .  $this->db->escape($crousal_image['link']) . "', image = '" .  $this->db->escape($crousal_image['image']) . "', sort_order = '" . (int)$crousal_image['sort_order'] . "'");

            $crousal_id = $this->db->getLastId();

        }
    }
}

任何建议我为什么会收到此错误以及如何解决此问题,谢谢您提前。

P.S。:Opencart 1.5.x

编辑:DB结构&模块信息

    $this->db->query("
        CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "mobiapp_crousal` (
          `crousal_id` INT(11) NOT NULL AUTO_INCREMENT,
          `name` VARCHAR(255) NOT NULL,
          `link` VARCHAR(255) NOT NULL,
          `image` VARCHAR(255) NOT NULL,
          `sort_order` INT(3) NOT NULL,
          PRIMARY KEY (`crousal_id`)
        ) ENGINE=MyISAM DEFAULT COLLATE=utf8_general_ci;");

模型文件

public function addCrousal($crousal_image) {
    $this->db->query("INSERT INTO " . DB_PREFIX . "mobiapp_crousal SET name = '" . $this->db->escape($crousal_image['name']) . "', sort_order = '" . (int)$crousal_image['sort_order'] . "'");

    $crousal_id = $this->db->getLastId();

    if (isset($crousal_image['crousal_image'])) {
        foreach ($crousal_image['crousal_image'] as $crousal_image) {
            $this->db->query("INSERT INTO " . DB_PREFIX . "mobiapp_crousal SET  crousal_id = '" . (int)$crousal_id . "', link = '" .  $this->db->escape($crousal_image['link']) . "', image = '" .  $this->db->escape($crousal_image['image']) . "'");

            $crousal_id = $this->db->getLastId();
        }
    }       
}   

public function editCrousal($crousal_image) {

    $crousal_id = $this->db->getLastId();

    $this->db->query("DELETE FROM " . DB_PREFIX . "mobiapp_crousal WHERE crousal_id = '" . (int)$crousal_id . "'");

    if (isset($crousal_image['crousal_image'])) {
        foreach ($crousal_image['crousal_image'] as $crousal_image) {

            $this->db->query("INSERT INTO " . DB_PREFIX . "mobiapp_crousal SET  crousal_id = '" . (int)$crousal_id . "', name = '" .  $this->db->escape($crousal_image['name']) . "', link = '" .  $this->db->escape($crousal_image['link']) . "', image = '" .  $this->db->escape($crousal_image['image']) . "', sort_order = '" . (int)$crousal_image['sort_order'] . "'");

            $crousal_id = $this->db->getLastId();

        }
    }
}

public function getCrousalImages() {
    $crousal_image_data = array();

    $crousal_image_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "mobiapp_crousal ORDER BY sort_order ASC");

    foreach ($crousal_image_query->rows as $crousal_image) {
        $crousal_image_description_data = array();

        $crousal_image_description_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "mobiapp_crousal WHERE crousal_id = '" . (int)$crousal_image['crousal_id'] . "'");

        $crousal_image_data[] = array(
            'crousal_image'            => $crousal_image,
            'link'                     => $crousal_image['link'],
            'name'                     => $crousal_image['name'],
            'crousal_id'               => $crousal_image['crousal_id'],
            'image'                    => $crousal_image['image'],
            'sort_order'               => $crousal_image['sort_order']
        );
    }

    return $crousal_image_data;
}

1 个答案:

答案 0 :(得分:1)

我确实对此模块进行了审核。好像这个模块有完全错误的结构。正如您在方法addCrousal foreach-statement中看到的那样,插入数据库。但是在这个插入carousal_id中,表中没有递增的将是不唯一carousal_id的记录。所以这个专栏不能是主要的。 我建议你用两个表重写模块" Slides"与关系(有很多)"图像"。或者您可以删除PRIMARY索引并且操作将通过,但它不是真正的解决方案。