开发者

How to update multiple rows with one single query

开发者 https://www.devze.com 2022-12-30 22:05 出处:网络
开发者_如何学JAVAI use Postgresql + PHP. Say I have this table: Books ( id, title, year ) and this array of titles in PHP:

开发者_如何学JAVAI use Postgresql + PHP.

Say I have this table:

Books ( id, title, year )

and this array of titles in PHP:

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

now I want update all rows where the title is in the $titles array above.

So I need a query like this:

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

Is is possible with one single query ? Or do I need to use FOR loop ?


It's possible, you were actually quite close.

For the SQL, the syntax looks like this:

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

To generate that using PHP, you'll want to do something like this:

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

The PHP implode() function joins array elements together using a string, so I put ',' between all of them, with the initial and final ' being put in the string manually.

Note that this will currently fail if any of the titles contain an apostrophe. If that's a possibility you will need to escape those.


You can use the implode() function, which will let you turn the array into a comma-separated string:

$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 .")"


What about

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

精彩评论

暂无评论...
验证码 换一张
取 消