27.7.9 C API 准备语句功能概述

下 table 总结了可用于预处理语句处理的功能。有关更多详细信息,请参见第 27.7.10 节“ C API 准备的语句功能描述”中的描述。

调用mysql_stmt_init()创建语句处理程序,然后调用mysql_stmt_prepare()准备语句字符串,mysql_stmt_bind_param()提供参数数据,并mysql_stmt_execute()执行语句。您可以通过更改mysql_stmt_bind_param()提供的各个缓冲区中的参数值来重复mysql_stmt_execute()

您可以使用mysql_stmt_send_long_data()向服务器发送文本或二进制数据。参见第 27.7.10.26 节,“ mysql_stmt_send_long_data()”

如果该语句是SELECT或生成结果集的任何其他语句,则mysql_stmt_prepare()还以MYSQL_RES结果集到mysql_stmt_result_metadata()的形式返回结果集元数据信息。

您可以使用mysql_stmt_bind_result()提供结果缓冲区,以便mysql_stmt_fetch()自动将数据返回到这些缓冲区。这是逐行读取。

语句执行完成后,使用mysql_stmt_close()关闭语句处理程序,以便可以释放与其关联的所有资源。届时,处理程序将变为无效,不应再使用。

如果您通过调用mysql_stmt_result_metadata()获得了SELECT语句的结果集元数据,则还应该使用mysql_free_result()释放元数据。

Execution Steps

为了准备和执行一条语句,应用程序遵循以下步骤:

调用mysql_stmt_prepare()时,MySQLClient 端/服务器协议执行以下操作:

调用mysql_stmt_execute()时,MySQLClient 端/服务器协议执行以下操作:

调用mysql_stmt_fetch()时,MySQLClient 端/服务器协议执行以下操作:

如果发生错误,则可以分别使用mysql_stmt_errno()mysql_stmt_error()mysql_stmt_sqlstate()来获取语句错误号,错误消息和 SQLSTATE 代码。

准备语句记录

对于使用mysql_stmt_prepare()mysql_stmt_execute() C API 函数执行的准备好的语句,服务器将PrepareExecute行写入常规查询日志,以便您可以知道何时准备和执行语句。

假设您准备并执行如下语句:

由于上述调用,服务器将以下行写入常规查询日志:

Prepare  [1] SELECT ?
Execute  [1] SELECT 3

日志中的每个PrepareExecute行都标记有[N]语句标识符,以便您可以跟踪记录了哪个准备好的语句。 * N 是一个正整数。如果有多个同时为 Client 激活的准备好的语句,则 N *可能大于 1.每条Execute行显示了将数据值替换为?参数后的准备好的语句。

首页