int
mysql_stmt_prepare(MYSQL_STMT *stmt,
const char *stmt_str,
unsigned long length)
给定由 mysql_stmt_init()
返回的语句句柄,准备由字符串 stmt_str
指向的 SQL 语句,并返回一个状态值。字符串长度应由 length
参数给出。该字符串必须包含单个 SQL 语句。您不应该在语句中添加终止分号 (;
) 或 \g
。
应用程序可以通过在 SQL 字符串的适当位置嵌入问号 (?
) 字符,在 SQL 语句中包含一个或多个参数标记。
标记仅在 SQL 语句中的某些位置合法。例如,它们在 INSERT
语句的 VALUES()
列表中(用于指定行的列值)或在与 WHERE
子句中的列的比较中(用于指定比较值)是允许的。但是,它们不允许用于标识符(例如表名或列名),也不允许用于指定二元运算符(例如 =
等号)的两个操作数。后者的限制是必要的,因为不可能确定参数类型。一般来说,参数只允许在数据操作语言 (DML) 语句中,而不允许在数据定义语言 (DDL) 语句中。
参数标记必须使用 mysql_stmt_bind_param()
或 mysql_stmt_bind_named_param()
绑定到应用程序变量,然后再执行语句。
对预处理语句引用的表或视图的元数据更改会被检测到,并在下次执行语句时导致自动重新准备语句。有关更多信息,请参见 预处理语句和存储程序的缓存。
-
命令以不正确的顺序执行。
-
内存不足。
-
MySQL 服务器已断开连接。
-
在查询期间与服务器的连接丢失了
-
发生未知错误。
如果准备操作不成功(即 mysql_stmt_prepare()
返回非零值),则可以通过调用 mysql_stmt_error()
获取错误消息。
请参阅 第 6.4.11 节“mysql_stmt_execute()” 中的示例。