在插入

时间:2015-06-01 11:06:32

标签: php mysql pdo

如何限制表格中每个类别的插入数量?我正在使用php和pdo。我有一些类别,每个类别必须有最多3个子类别。一切都存储在db中,表格看起来像这样。

说清楚!我在菜单中有一些类别,每个类别最多可以包含3个子类别。当然不是同名,但每个类别不能超过3个。我当时输入了一个,这意味着你可以在当时插入多个,但在db中它不能超过3个。

某些类别

 - some subcategory
 - some subcategory
 - some subcategory

类别

id |类别|

子类

id | subcategory_name | id_category |

现在,我的代码看起来像这样。

    if(isset($_POST['sub'])) {

    $InputSubcategory = $_POST['InputSubcategory'];
    $InputId          = $_POST['InputId'];

    $sql = $pdo->prepare("INSERT INTO subcategory(subcategory_name,id_category) 
                          VALUES(:field1,:field2)");
    $sql->execute(array(':field1' => $InputSubcategory,
                        ':field2' => $InputId));
    $affected_rows = $sql->rowCount();
    if ($affected_rows > 0) {
    header( "refresh:0" );
    die();
    }
}         
if(isset($_POST['cat'])) {

    $InputCategory = $_POST['InputCategory'];

    $sql = $pdo->prepare("INSERT INTO category(category) 
                          VALUES(:field1)");
    $sql->execute(array(':field1' => $InputCategory));
    $affected_rows = $sql->rowCount();
    if ($affected_rows > 0) {
    header( "refresh:0" );
    die();
    }
}

修改 我做到了!我接下来做了什么。每个表中的Count()行,然后在if中比较计数的数字是否大于或等于3.如果if为真,则显示错误,如果为false,则继续插入。

    if(isset($_POST['cat'])) {

    $nRows = $pdo->query('select count(*) from category')->fetchColumn();  

    if ($nRows >= 3) {
      echo'
      <div class="alert alert-warning">
         <span class="glyphicon glyphicon-ok"></span> <strong>Warning</strong>
          <hr class="message-inner-separator">
          <p>You reach maximum category limit.</p>
      </div>';
      header( "refresh:2;url=insert.php" );
    } else {

      $InputCategory = $_POST['InputCategory'];

      $sql = $pdo->prepare("INSERT INTO category(category) 
                            VALUES(:field1)");
      $sql->execute(array(':field1' => $InputCategory));
      $affected_rows = $sql->rowCount();
      if ($affected_rows > 0) {
      header( "refresh:0" );
      die();
      }  

    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用触发器阻止将3个以上的数据库插入数据库本身。

DELIMITER $$
CREATE TRIGGER subcategory_bi BEFORE INSERT ON subcategory FOR EACH ROW
BEGIN

  IF (SELECT COUNT(1) FROM subcategory sc WHERE sc.category_id = NEW.category_id) >= 3 THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'this category already has the max allowed subcategories';
  END IF;

END $$
DELIMITER ;