如何使用PDO在一个数据库之旅中插入多个记录?

时间:2011-06-04 08:33:53

标签: php mysql pdo

我有一个名为propAmenities的表,其中包含两列amenity_idproperty_id基本上该表包含外键。

现在我必须使用命名占位符为以下语句生成PDO查询。

INSERT INTO propAmenities (amenity_id, property_id) VALUES (1, 1), (2, 1), (3, 1)

我尝试使用以下语法,但我不确定这是否有效。

$sth->$this->dbh->prepare('INSERT INTO 
                           propAmenities 
                           (amenity_id, property_id) 
                           VALUES 
                           (:amenity_id, :property_id), 
                           (:amenity_id, :property_id), 
                           (:amenity_id, :property_id)');

并且对于上述查询我不知道如何使用PDO的bindParam()?我如何处理这种情况使用PDO?我使用错误的PDO占位符吗?

2 个答案:

答案 0 :(得分:5)

您可以为占位符提供您想要的任何名称,以便为您的SQL提供以下内容:

INSERT INTO propAmenities 
(amenity_id, property_id) 
VALUES 
(:amenity_id1, :property_id1), 
(:amenity_id2, :property_id2), 
(:amenity_id3, :property_id3)

然后:

$stmt->bindParam(':amenity_id1',  1);
$stmt->bindParam(':property_id1', 1);
$stmt->bindParam(':amenity_id2',  2);
$stmt->bindParam(':property_id2', 1);
$stmt->bindParam(':amenity_id3',  3);
$stmt->bindParam(':property_id3', 1);

或者,当然,为execute构建适当的数组。在这种情况下,非命名占位符可能更容易使用:

INSERT INTO propAmenities 
(amenity_id, property_id) 
VALUES 
(?, ?),
(?, ?),
(?, ?)

然后你可以遍历你的值并用适当的数组调用execute

$stmt->execute(array(1, 1, 2, 1, 3, 1));

答案 1 :(得分:-6)

在这里不使用准备好的查询要简单得多,只需使用一些implode()生成查询字符串并执行它。当然,请确保您的参数被正确引用(因为它们是整数,应用intval()就足够了。)