我指的是mysql_stmt_bind_named_param()

我不理解文档中的示例.它使用了大约traceparent个从来没有使用过的东西.我来自PHP,在那里绑定变量使用:bindName语法.

我完全误解了它是如何工作的.我想给每个绑定变量命名,这样代码就变得更可读,也更少bug [想象一下INSERT有10个字段.

有没有办法用函数mysql_stmt_bind_named_param()来代替INSERT INTO foo SET bar_int = ?, barChar = ?,比如INSERT INTO foo SET bar_int = :intValue, barChar = :charValue

如果是,如何设置函数的参数?mysql_stmt_bind_named_param()是相当新的,我在互联网上没有找到任何东西-如上所述,文档中的示例不仅没有澄清,反而让我感到困惑.


保罗·T comments 后的最新消息:

  1. See Also章档案不存在文档非常差,没有维护.
  2. 在MySQL8.2版本中,提到的文件是testclients/mysql_client_test.cc,它也令人困惑.

在我看来,它没有得到支持.不知道甲骨文实现了什么.

推荐答案

您误解了这个新的"命名参数"特性的用途.我同意他们没有在你链接的页面上很好地解释它.

他们将这一功能称为"命名参数",这当然会让人们认为它是关于添加标签作为参数占位符,就像其他一些SQL产品(如Oracle)所支持的那样.

事情不是这样的.此功能不实现在参数占位符中使用标签的类似Oracle的样式.MySQL仍然只支持?作为位置(未命名)参数占位符.

他们称之为"命名参数"的功能意味着它允许您的查询访问Query Attribute,这是一个新功能.查询属性应该用于查询元数据,而不是将值作为参数传递给准备好的语句.

您可能希望阅读此博客,以获得对查询属性功能的独立审查:

然后阅读手册中的这些页面:

后面的手册页面更清楚地说明了如何在C API中使用name参数:

  • name:字符指针数组的地址,每个字符指针指向定义属性名称的以空结尾的字符串.该数组应包含n_params个元素,每个属性对应一个元素.使用character_set_client系统变量指示的字符集传输查询属性名.

请记住,这是用于绑定query attributes的,而不是传统的查询参数.

您还可以在https://dev.mysql.com/doc/c-api/8.2/en/mysql-stmt-bind-named-param.html中的示例中看到,查询既有传统的查询参数(name数组元素是空指针)和命名查询属性(name数组元素是命名查询属性的字符串).

const char *names[2] = {nullptr, "traceparent"};

我推断,如果只使用传统的查询参数,您仍然需要这个数组,并且它的元素必须与binds个数组的长度一样多,但对于传统的查询参数,它们都是空指针.


-不,不.

我不知道MySQL开发人员出了什么问题.他们几乎没有办法让这个功能更令人困惑或不方便使用.

Mysql相关问答推荐

MySQL:获取连续记录的数量(日期)?

如何通过SQL来计算到达特定值的行的数量

条件触发mysql

如何在 WampServer 上重新初始化 MySQL 以允许 lower_case_table_names = 2

使用 Having 表达式连接多个表

Mysql Pivot 查询/建议

根据单个日期字段获取范围/天数

如何在不使用子查询的情况下按最小日期计算新用户?

相关查询 - 在派生表中,我可以有多个嵌套级别吗?

MySQL IF() 函数根据指定条件执行代码块

在 SQL 中将列添加为 End_date,间隔为 +100 天

WHERE SQL 语句中的列顺序是否重要

MySQL Group By 和 Sum 其他列的总值

是否可以在内部连接期间重命名连接列?

MySQL如何为数据库中的所有表生成DDL

如何在 MySQL 中为用户设置默认架构

按日期和时间降序排序?

phpMyAdmin - 无法连接 - 无效设置 - 自从我添加了 root 密码 - 被锁定

电话号码和地址的mysql数据类型

BIGINT mysql 性能与 INT 相比