我目前正在使用Wordpress网站,我想知道是否有可能创建一个更新wordpress帖子的触发器,具体为post_content
列,在我插入一个新的在另一张表中排。
假设我将此表命名为persons
,并创建了四列ID
,post_ID
,zipCode
和name
。 post_id
是wordpress_posts
表的外键。
我在wordpress中创建了一个帖子,其中应显示persons
表中的所有新条目。这篇文章有ID
1。
我的更新触发器应该是什么样子才能让它工作?
我试过这个,没有运气:
BEGIN
UPDATE wp_posts
(wp_posts.post_content) WHERE wp_posts.ID = postID;
VALUES
(persons.zipCode, persons.name);
END;
错误讯息:
#1064 - you have an error in your sql syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(wp_posts.posts_content) WHERE wp_posts.ID = postID; VALUES (persons.zipC' at line 4
非常感谢一些解释!
答案 0 :(得分:2)
我认为,您没有读取UPDATE语法的MySQL参考,并且您没有看到任何MySQL触发器的示例。 另一个问题是,您尝试使用两个wp_posts列更新一个人列。您必须使用字符串连接。
尝试这样的事情:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace sample
{
class Program
{
static void Main(string[] args)
{
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader("C:\\Users\\ADMIN\\Pictures\\test.xml");
string contents = "";
while (reader.Read())
{
reader.MoveToContent();
if (reader.NodeType == System.Xml.XmlNodeType.Element)
contents += "<" + reader.Name + ">\n";
if (reader.NodeType == System.Xml.XmlNodeType.Text)
contents += reader.Value + "\n";
}
Console.Write(contents);
Console.ReadLine();
}
}
}
答案 1 :(得分:1)
这实际上是一个标准的审计跟踪触发器。实际上,您可以使用 BEFORE
触发器,但从概念上讲, AFTER
触发器更有意义。但是,必要的是,这是一个 ROW
触发器,因为它正在利用写入触发表的数据。
ROW
触发器不应该,并且在大多数数据库上都不允许查询它所连接的表,因为这可能违反ACID一致性规则。 (这是所谓的&#34;变异表&#34;问题。)相反, ROW
触发器可以访问伪记录 OLD
和 NEW
,表示其修改导致触发器触发的单行。 OLD
在发布DML语句之前包含行数据 , NEW
包含数据< em>在DML语句提交后它将是。您可以将这些记录中的字段作为表限定字段名称访问,其中 OLD
或 NEW
作为表名称,例如。 OLD.col1
,NEW.col2
&amp; c。
在 BEFORE ROW
触发器中,您实际上可以修改 NEW
的内容,从而更改将要写入的内容,但我们不会#39这里需要这样做。
我假设您要将新数据附加到现有帖子;我们使用可变参数CONCAT
函数来做到这一点。完整的语法是
CREATE TRIGGER log_wp_update
AFTER INSERT
ON persons
FOR EACH ROW
UPDATE wp_posts
SET post_content = CONCAT(post_content, ' ', NEW.zipCode, ' ', NEW.name)
WHERE ID = 1;
由于此触发器的主体是一个简单的 UPDATE
语句,因此无需将其包含在BEGIN ... END;
中,也无需使用{{1如果您的客户需要它们,请使用指令。
我希望有所帮助。如果您需要任何澄清,请不要犹豫。
答案 2 :(得分:0)
这将创建触发器:
AppDependencyResolver.Current.CreateUoWinCurrentThread()
但我还不清楚你要把什么放在wp_posts.post_content中。
此致