如何使用一个查询更新多行

时间:2010-05-14 22:53:47

标签: php database postgresql

我使用Postgresql + PHP。

说我有这张桌子:

Books ( id, title, year )

以及PHP中的这个标题数组:

$titles = array ("bible","kafka","Book of Eli");

现在我想要更新标题在上面的$ titles数组中的所有行。

所以我需要这样的查询:

UPDATE books SET year = '2001-11-11' WHERE title is in $titles;

单个查询可以吗?或者我需要使用FOR循环吗?

3 个答案:

答案 0 :(得分:4)

有可能,你实际上非常接近。

对于SQL,语法如下所示:

UPDATE books SET year = '2001-11-11' WHERE title IN ('bible','kafka','Book of Eli');

要使用PHP生成它,您需要执行以下操作:

$query = "UPDATE books SET year = '2001-11-11' WHERE title IN ('" . implode("','", $titles) . "');'";

PHP implode()函数使用字符串将数组元素连接在一起,因此我将','放在所有这些元素之间,并将初始和最终'手动放入字符串中。 / p>

请注意,如果任何标题包含撇号,则此操作将失败。如果这是一种可能性,你将需要逃避这些。

答案 1 :(得分:1)

您可以使用implode()函数,它可以让您将数组转换为以逗号分隔的字符串:

$titles = array ("bible","kafka","Book of Eli");
$comma_separated = implode(",", $array)
$sql = "UPDATE books SET year = '2001-11-11' WHERE title is in (" . $comma_separated .")"

答案 2 :(得分:1)

怎么样?
$sql = "UPDATE books SET year = '2001-11-11' WHERE title in ('".implode("','",$titles)."')";