ColdFusion: несколько операторов SQL в запросе? - PullRequest
6 голосов
/ 10 июня 2011

Очевидно, что 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);

Get превращается в это:

<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 ]

11 голосов
/ 10 июня 2011

В ColdFusion Admin перейдите к форме определения источника данных и добавьте «allowMultiQueries = true» в поле «Строка подключения».После этого вы можете передать несколько запросов, разделенных точкой с запятой, в одном теге CFQUERY.Просто убедитесь, что вы используете CFQUERYPARAM для проверки на наличие атак инъекцией SQL.

1 голос
/ 29 ноября 2018

В случае, если кто-то найдет это и поместит allowMultiQueries=true в поле подключения не работает, я наконец попытался добавить его к фактическому URL JDBC, как это jdbc:mysql://127.0.0.1:3306/mydbname?allowMultiQueries=true. Это сработало с первой попытки потом.

...