ColdFusion:查询中的多个SQL语句?
问题描述:
显然的ColdFusion不喜欢在一个查询中的多个SQL语句...所以曾经是这样的:ColdFusion:查询中的多个SQL语句?
SET @sender_user_id = 3, @recipient_user_id = 5;
INSERT INTO messages (message_type, sender_id, message_title, message_content)
VALUES(3, @sender_user_id, 'One more thing...', 'I am testing this message');
SET @saved_message_id = LAST_INSERT_ID();
INSERT INTO message_recipient (message_id, user_id)
VALUES(@saved_message_id, @recipient_user_id);
INSERT INTO message_status (message_id, user_id, is_read, read_datetime, is_deleted, deleted_datetime)
VALUES (@saved_message_id, @recipient_user_id, 0, NULL, 0, NULL);
获取反倒成了这样:
<cftransaction>
<cfquery name="insertMessage" dataSource="mySource">
SET @sender_user_id = 3, @recipient_user_id = 5;
</cfquery>
<cfquery name="insertMessage2" dataSource="mySource">
INSERT INTO messages (message_type, sender_id, message_title, message_content)
VALUES(3, @sender_user_id, '#params.message_title#', '#params.message_content#');
</cfquery>
<cfquery name="insertMessage3" dataSource="mySource">
SET @saved_message_id = LAST_INSERT_ID();
</cfquery>
<cfquery name="insertMessage4" dataSource="mySource">
INSERT INTO message_recipient (message_id, user_id)
VALUES(@saved_message_id, @recipient_user_id);
</cfquery>
<cfquery name="insertMessage5" dataSource="mySource">
INSERT INTO message_status (message_id, user_id, is_read, read_datetime, is_deleted, deleted_datetime)
VALUES (@saved_message_id, @recipient_user_id, 0, NULL, 0, NULL);
</cfquery>
</cftransaction>
这工作...但我我想知道是否有一些我不知道的ColdFusion。否则,这是有效的。
答
在ColdFusion Admin中,转到您的数据源定义表单并在连接字符串框中添加“allowMultiQueries = true”。一旦你这样做了,你可以在一个CFQUERY标签中传递多个分号分隔的查询。只要确保您使用的是CFQUERYPARAM来筛选SQL注入攻击。
你是什么意思“变成”?对于例子中所示的过程,它确实应该在事务中,因为您正在处理多个表/记录,实质上这是一个原子记录。我假设你有这种分布在多个表上,以允许消息有多个用户收到每个消息的个人状态? – colinross 2011-06-09 21:18:35
是的,你是对的......但即使在声明MySQL变量时,这些变量也必须在自己的查询中才能正常工作。我只是不确定在语法上是否有某种类型,至少将变量组合到查询中。 – dcolumbus 2011-06-09 21:21:00