PDO多行插入问题
Pdo multiple row insert issue
我在使用 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 table 架构。
product_id int(11) NO PRI
attribute_id int(11) NO PRI
product_code int(11) NO
text text NO
此代码正在删除新插入的行。注释掉就好了
/*
$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();
*/
我在使用 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 table 架构。
product_id int(11) NO PRI
attribute_id int(11) NO PRI
product_code int(11) NO
text text NO
此代码正在删除新插入的行。注释掉就好了
/*
$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();
*/