Pdo多行插入问题

时间:2015-03-03 14:10:54

标签: php mysql oop pdo

enter image description here

我在使用pdo prepare语句在mysql中插入多行时遇到了一些问题。

插入只能工作一次。

我试图将查询放在foreach之前,但同样的问题。

  $product_id = $_POST['id'];
  if (isset($_POST['product_attribute'])){
        $att_id = array();

    foreach ($_POST['product_attribute'] as $product_attribute) {

      $att_id[] = $product_attribute['attribute_id'];

      if ($product_attribute['attribute_id']) {
          $stmt = $database->prepare("DELETE FROM product_attribute WHERE product_id =:product_id AND attribute_id=:attribute_id");
          $stmt->bindParam(':product_id', $product_id, PDO::PARAM_INT);
          $stmt->bindParam(':attribute_id',  $product_attribute['attribute_id'], PDO::PARAM_INT);
          $stmt->execute();


        foreach ($product_attribute['product_attribute_description'] as $product_attribute_description) {
          $stmt = $database->prepare("INSERT INTO product_attribute SET product_id=:product_id, product_code=:product_code, attribute_id=:attribute_id, `text`=:atext");
          $stmt->bindParam(':product_id', $product_id,  PDO::PARAM_INT);
          $stmt->bindParam(':product_code', $_POST['codprodus'], PDO::PARAM_INT);
          $stmt->bindParam(':attribute_id', $product_attribute['attribute_id'], PDO::PARAM_INT);
          $stmt->bindParam(':atext',  $product_attribute_description['text'], PDO::PARAM_STR);
          $stmt->execute();

        }
      }
    }

    $vals = implode( ",", $att_id );
    $stmt = $database->prepare("DELETE FROM product_attribute WHERE product_id =:product_id AND attribute_id NOT IN(:vals)");
    $stmt->bindParam(':product_id', $product_id, PDO::PARAM_INT);
    $stmt->bindParam(':vals', $vals, PDO::PARAM_STR);
    $stmt->execute();

  }else {
    $stmt = $database->prepare("DELETE FROM product_attribute WHERE product_id =:product_id");
    $stmt->bindParam(':product_id',  $product_id, PDO::PARAM_INT);
    $stmt->execute();
  }

Print_r($ _ POST [' product_attribute']:

Array([103] => Array(
            [attribute_id] => 103
            [product_attribute_description] => Array
                (
                    [2] => Array
                        (
                            [text] => 56
                        )

                )

        )

    [102] => Array
        (
            [attribute_id] => 102
            [product_attribute_description] => Array
                (
                    [2] => Array
                        (
                            [text] => da
                        )

                )

        )

    [104] => Array
        (
            [attribute_id] => 104
            [product_attribute_description] => Array
                (
                    [2] => Array
                        (
                            [text] => da
                        )

                )

        )

)

这是我的product_attribute表架构。

product_id      int(11)     NO  PRI         
attribute_id    int(11)     NO  PRI         
product_code    int(11)     NO          
text            text        NO

1 个答案:

答案 0 :(得分:1)

此代码正在删除新插入的行。评论一下,一切都很好。

/*
$vals = implode( ",", $att_id );
$stmt = $database->prepare("DELETE FROM product_attribute WHERE product_id =:product_id AND attribute_id NOT IN(:vals)");
$stmt->bindValue(':product_id', $product_id, PDO::PARAM_INT);
$stmt->bindValue(':vals', $vals, PDO::PARAM_STR);
$stmt->execute();
*/