是否可以使用 pdo 在 php 中将 postgres json 选择器作为参数传递
Is it possible to pass a postgres json selector as a parameter in php using pdo
考虑以下 json 描述存储在 postgres 数据库的 json 列中的文件:
{
"e8af43c1-16d3-4f9b-900b-0abec048aa62": { "name": "foo", "size": 1024 },
"1d83d835-d7d2-4433-adb7-05dcd9b3397e": { "name": "bar", "size": 512 },
...
"60394d82-7134-42ca-8fb0-1211360c3a72": { "name": "baz", "size": 1 }
}
在 postgres 中,可以 select 这些文件中的任何一个来自 json 列的键,例如:
SELECT json_column->'60394d82-7134-42ca-8fb0-1211360c3a72' FROM files
是否可以使用 pdo 传入 json select 或作为来自 php 的参数?我在想象这样的事情:
public function get_file_details($file_id) {
$sql = "SELECT json_column->':file_id' FROM files";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':file_id', $file_id, PDO::PARAM_STR);
$stmt->execute();
return $stmt->fetchColumn();
}
但这不起作用。
这个 SQL 肯定适用于您的情况:
select
(
select value from jsonb_each(files.json_column) as t(key, value)
where key = :file_id
) from files;
所以一行改变:
$sql = <<<SQLSTRING
select
(
select value from jsonb_each(files.json_column) as t(key, value)
where key = :file_id
) from files;
SQLSTRING;
其余不变
考虑以下 json 描述存储在 postgres 数据库的 json 列中的文件:
{
"e8af43c1-16d3-4f9b-900b-0abec048aa62": { "name": "foo", "size": 1024 },
"1d83d835-d7d2-4433-adb7-05dcd9b3397e": { "name": "bar", "size": 512 },
...
"60394d82-7134-42ca-8fb0-1211360c3a72": { "name": "baz", "size": 1 }
}
在 postgres 中,可以 select 这些文件中的任何一个来自 json 列的键,例如:
SELECT json_column->'60394d82-7134-42ca-8fb0-1211360c3a72' FROM files
是否可以使用 pdo 传入 json select 或作为来自 php 的参数?我在想象这样的事情:
public function get_file_details($file_id) {
$sql = "SELECT json_column->':file_id' FROM files";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':file_id', $file_id, PDO::PARAM_STR);
$stmt->execute();
return $stmt->fetchColumn();
}
但这不起作用。
这个 SQL 肯定适用于您的情况:
select
(
select value from jsonb_each(files.json_column) as t(key, value)
where key = :file_id
) from files;
所以一行改变:
$sql = <<<SQLSTRING
select
(
select value from jsonb_each(files.json_column) as t(key, value)
where key = :file_id
) from files;
SQLSTRING;
其余不变