所以我的函数post()会做下一件事:
$category = serialize($postdata['post_category']);
$query = "
INSERT INTO posts(post_title, post_content, post_category)
VALUES ('$postdata[post_title]', '$postdata[post_content]', '$category')
";
将序列化数据插入到数据库中,但是在调用函数时只显示那些具有相同类别的帖子时出现问题,其函数如下所示:
public function cat($cat){
global $db;
$query = "
SELECT * FROM posts
WHERE post_category LIKE '%$cat%'
";
return $db->select($query);
}
所以我的问题是:将这个特定情况下的非序列化数据插入数据库是否更好(以及如何做到这一点)或者更好地提取序列化数据然后反序列化它以显示某些特定帖子(与之前相同,尝试了几个选项,并没有运气实现正确的结果)?
答案 0 :(得分:1)
If you want to store the categories array, you can use implode(',', $postdata['post_category'])
$category = implode(',', $postdata['post_category']);
$query = "
INSERT INTO posts(post_title, post_content, post_category)
VALUES ('$postdata[post_title]', '$postdata[post_content]', '$category')
";
and if you want to search the post based on some category you can use
public function cat($cat){
global $db;
$query = "
SELECT * FROM posts
WHERE find_in_set(".$cat.",post_category)
";
return $db->select($query);
}
答案 1 :(得分:0)
如果$postdata['post_category']
是一个数组,您还可以在同一列中插入多个类别:
$category = ',' . implode(',', $postdata['post_category']) . ',';
$query = "
INSERT INTO posts(post_title, post_content, post_category)
VALUES ('$postdata[post_title]', '$postdata[post_content]', '$category')
";
请注意,您最后应该comma
,并且类别字符串的开头如此:,1,2,3,4,
!
从类别中选择帖子:
public function cat($cat){
global $db;
$query = "
SELECT * FROM posts
WHERE post_category LIKE ',$cat,'
";
return $db->select($query);
}
但是这种方法不允许您从多个类别中选择帖子。
注意:您应该考虑学习使用多个表格和JOIN
。一个用于发布的表,一个用于类别的表和一个用于post_to_categories的表,其中所有类别及其特定帖子都被链接。