我指的是mysql_stmt_bind_named_param()
我不理解文档中的例子。它使用了一些从未使用过的traceparent
。我来自PHP,其中绑定变量使用:bindName
语法。
我想我完全误解了它是如何工作的,我想给每个绑定变量命名,这样代码就变得更可读,也更少bug [想象一下一个有10个字段的INSERT
]。
有没有一种方法可以代替INSERT INTO foo SET bar_int = ?, barChar = ?
运行类似INSERT INTO foo SET bar_int = :intValue, barChar = :charValue
的函数mysql_stmt_bind_named_param()
?
如果是的话,如何设置函数的参数?mysql_stmt_bind_named_param()
是相当新的,我在互联网上没有找到任何东西-如上所述,文档中的示例让我感到困惑,而不是澄清。
订阅关于Paul T的评论:
See Also
部分中的文件不存在。文档很差,没有维护。
1.在MySQL 8.2版本中,提到的文件是testclients/mysql_client_test.cc
,它也很容易混淆。
在我看来它不受支持。不知道Oracle实现了什么。
2条答案
按热度按时间kuuvgm7e1#
你误解了这个新的“命名参数”功能的用途。我同意他们在你链接的页面上没有很好地解释它。
他们将此功能称为“命名参数”,这当然会让人们认为它是关于添加标签作为参数占位符,因为其他一些SQL产品(例如Oracle)支持此功能。
这不是它的目的。这个特性没有实现类似Oracle的样式,即在参数占位符中使用标签。MySQL仍然只支持
?
作为位置(未命名)参数占位符。他们称之为“命名参数”的功能意味着它允许你的查询访问一个Query Attribute,这是一个新功能。Query属性应该用于查询元数据,而不是将值作为参数传递给准备好的语句。
您可能想阅读此博客,以获得查询属性功能:的独立评论:
然后阅读手册中的这些页面:
后一个手册页更清楚地说明了如何在C API中使用
name
参数:name
:字符指针数组的地址,每个指针指向一个定义属性名的以null结尾的字符串。该数组应包含n_params
元素,每个属性对应一个元素。查询属性名使用character_set_client
系统变量指示的字符集传输。请记住,这是用于绑定 * 查询属性 *,而不是传统的查询参数。
您还可以在https://dev.mysql.com/doc/c-api/8.2/en/mysql-stmt-bind-named-param.html的示例中看到,查询既有传统的查询参数,
name
数组元素是空指针,也有命名的查询属性,name
数组元素是字符串来命名查询属性。字符串
我推断,如果你只使用传统的查询参数,你仍然需要这个数组,它必须有和你的
binds
数组长度一样多的元素,但是对于传统的查询参数,它们都是空指针。编辑:
我不知道MySQL开发人员出了什么问题,他们几乎不可能让这个特性变得更加混乱或不方便使用。
xtupzzrd2#
我为MySQL C API编写了这个小extension,它支持使用灵活分隔符的真实的绑定变量行为:
字符串
使用自己的分隔符:
型