我有一个joomla数据库,其中包含“jos_content
”表,其中包含有关文章的详细信息。
在该表中,“attribs
”列为TEXT
数据类型,其中包含有关文章属性的数据,如:
show_pdf_icon=0
show_print_icon=0
show_email_icon=0
我正在尝试修改属性'show_print_icon',使其具有1,如下所示:
show_pdf_icon=0
show_print_icon=1
show_email_icon=0
为此,我编写了一个查询,将列中的'show_print_icon = 0'替换为'show_print_icon = 1'。
UPDATE jos_content set attribs=replace("attribs", "%print_icon=0\nshow_email%",
"%print_icon=1\nshow_email%") where attribs like '%print_icon=0\nshow_email%';
出于某种原因,在执行此查询后,我将列值设为空。 我无法理解我哪里出错了。查询有什么问题?
答案 0 :(得分:1)
一种方法是:
$sql = "Select attribs from jos_content";
$db = JFactory::getDBO():
$db->setQuery($sql):
$contents = $db->loadObjectList();
foreach($contents as $content){
$attribs = $content->attribs;
$attribs = explode("\n", $attribs);
if(!$attribs['show_print_icon']){
$attribs['show_print_icon'] = 1;
$content->attribs = implode("\n", $attribs);
// run the update query here for each content
}
}
我会以其他方式告诉您,使用Com Content Model
答案 1 :(得分:0)
检查换行符。它可能不是\ n,它也可能是\ r \ n或只是\ r \ n,因此您无法在此规则上可靠地匹配。
另外,为什么需要文本环境?它只会使您的登录更加复杂。例如,您必须确保保持一致的数据,而不是以其他顺序存在变量。
我不知道那里的数据库结构是什么,但尝试匹配您需要更改的内容。如果现在不可能,那就试着改变你的逻辑,以便让它成为可能