我使用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循环吗?
答案 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)."')";