我有一个名为propAmenities
的表,其中包含两列amenity_id
和property_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占位符吗?
答案 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()就足够了。)