ColdFusion:查询中有多个SQL语句?

时间:2011-06-09 21:09:57

标签: mysql coldfusion transactions coldfusion-8

显然,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事情。否则,这有效。

2 个答案:

答案 0 :(得分:11)

在ColdFusion Admin中,转到数据源定义表单并将“allowMultiQueries = true”添加到“连接字符串”框中。完成后,您可以在单个CFQUERY标记中传递多个分号分隔的查询。只需确保使用CFQUERYPARAM来筛选SQL注入攻击。

答案 1 :(得分:1)

万一有人发现这个问题并将allowMultiQueries=true放在连接框中不起作用,我终于尝试将其附加到实际的JDBC URL上,例如jdbc:mysql://127.0.0.1:3306/mydbname?allowMultiQueries=true。之后进行了第一次尝试。