【发布时间】:2023-03-27 13:52:02
【问题描述】:
我正在尝试使用 PostgreSQL 数据库在 PHP 中开发一个问答网站。 我有一个动作来创建一个具有标题、正文、类别和标签的页面。我设法插入了所有这些字段,但是在插入多个标签值时遇到了一些问题。
我使用这个函数将逗号分隔的值放入一个数组中,现在我想要将每个数组元素插入到表 tags 上的数据库中(避免重复),然后插入我的多对多关系表 @ 987654323@:
$tags = explode(',', $_POST['tags']); //Comma separated values to an array
打印如下内容:
Array ( [0] => hello [1] => there [2] => this [3] => is [4] => a [5] => test )
action/create_question.php
$category = get_categoryID_by_name($_POST['category']);
$question = [
'userid' => auth_user('userid'),
'body' => $_POST['editor1'],
'title' => $_POST['title'],
'categoryid' => $category
];
create_question($question, $tags);
然后是我的create_question 我应该在其中插入标签。
function create_question($question, $tags) {
global $conn;
$query_publications=$conn->prepare("SELECT * FROM insert_into_questions(:body, :userid, :title, :categoryid);
");
$query_publications->execute($question);
}
我正在考虑做这样的事情:
全局 $conn;
foreach ($tags as $tag) {
$query_publications=$conn->prepare("INSERT INTO tags(name) VALUES($tag);
");
$query_publications->execute($question);
}
但是我需要将标签 id 插入到我的多对多表中。我是否需要创建另一个过程 get_tags_id 然后获取一个 tag_id 数组并在我尝试标记时插入它们?
我什么时候执行查询?在两个插入之后还是在彼此的末尾?
对于任何误用的术语或我的新手问题,我们深表歉意。我是 PHP 新手,正在为一些新概念而苦苦挣扎。
【问题讨论】:
-
您需要在 questions 表和 tags 表上有一个主键 (ID)。然后有第三个表只包含问题和标签 ID。
-
我有。我省略了这一点,因为我使用这种方法的问题很清楚
-
插入后,您可以使用 PDO 的 lastInsertId 函数来检索您刚刚插入的行的主键。然后,您可以将数据添加到下一个表中,而无需先执行单独的查询来获取主键。 php.net/manual/en/pdo.lastinsertid.php
-
如果您提供实际的表定义(
CREATE TABLE语句)和您的 Postgres 版本,这将有助于 很多。您只需要一个单个 SQL 语句。 -
那么你有答案了吗?
标签: php database postgresql common-table-expression upsert