[/ Copyright (c) 2019-2024 Ruben Perez Hidalgo (rubenperez038 at gmail dot com) Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ] [section:queries Text queries] To run a text query, use any of the following functions, passing a string-like object (convertible to [reflink string_view]) containing valid SQL as the first parameter: * [refmem connection execute] or [refmemunq connection async_execute]: these functions run the query and read the generated results into memory. * [refmem connection start_execution] and [refmemunq connection async_start_execution]: these functions initiate a text query as a multi-function operation. Almost any query that may be issued in the `mysql` command line can be executed using this method. This includes `SELECT`s, `UPDATE`s, `INSERT`s, `DELETE`s, `CREATE TABLE`s... In particular, you may start transactions issuing a `START TRANSACTION`, commit them using `COMMIT` and rolling them back using `ROLLBACK`. [heading Use cases] You should generally prefer prepared statements over text queries. Text queries can be useful for simple, non-parametrized queries: * `"START TRANSACTION"`, `"COMMIT"` and `"ROLLBACK"` queries, for transactions. * `"SET NAMES utf8mb4"` and similar, to set variables for encoding, time zones and similar configuration options. * `"CREATE TABLE ..."` and similar DDL statements. If you need to run parametrized SQL, involving user input, you have two options: * Use [link mysql.prepared_statements prepared statements] instead of text queries. * If you don't mind using experimental features, you can use [link mysql.sql_formatting client-side SQL formatting] to securely compose queries in the client. [warning [*SQL injection warning]: if you compose queries by concatenating strings without sanitization, your code is vulnerable to SQL injection attacks. Use prepared statements or proper formatting functions instead! ] [heading Running multiple queries at once] You can run several semicolon-separated queries in a single `execute()` call by enabling the [refmem handshake_params multi_queries] option. You can find an example [link mysql.multi_resultset.multi_queries here]. [endsect]