MySql C API:是否支持编写语句命名参数?

时间:2014-04-18 11:33:34

标签: mysql c mysql-connector

我将本地C ++应用程序从SQLite移植到MySql。在SQLite中,可以使用命名的预准备语句参数,如下所示:

SELECT * FROM `Table` WHERE `Id` = @Id

在MySql文档中没有提到这样的功能。相反,在MySql中,我们使用未命名的参数,如下面的一个:

SELECT * FROM `Table` WHERE `Id` = ?

查询非常简单时不是问题;但是,对于具有10-15个参数的复杂查询,如果必须更新语句,这种方式看起来很糟糕;你必须控制自己,每个未命名的参数都在正确的位置,并记住参数数组中的哪个索引是什么问题符号。所以,对我来说,在MySql中看起来很不寻常,不支持命名的预处理语句参数。

在MySql C API中是否有任何方法可以在预准备语句中使用命名参数而不是用问号代表的未命名参数?

1 个答案:

答案 0 :(得分:0)

我们在SQLite中没有对此功能的“官方”支持。但是,可以模仿它。 而不是发送1命令:

SELECT * FROM `Table` WHERE `Id` = ?

需要发送2个:

SET @Id = 1
SELECT * FROM `Table` WHERE `Id` = @Id
SET @Id = NULL

如果将查询参数作为名称 - 值对(例如,std:unordered_map),则生成自动创建和清除变量的SQL查询不是问题。当然,您需要发送尽可能多的查询,而不是1个查询,如果需要,还需要相同数量的查询来清理变量。如果在SQL查询中使用变量,则还有可能覆盖任何变量。但是,与未命名的参数相比,这种方法在复杂查询中仍然可用且更加舒适。