对动态列名称使用准备好的语句
使用数据库查询时,在尝试指定动态列名称时会出现常见的困境。本文探讨了通过预准备语句传递变量列名的可能性,特别是在使用 Java 的 MySQL 中。
挑战语句
当用户尝试执行预准备语句时,列名作为字符串传入:
但是,生成的 SQL 语句将列名显示为文字的一部分字符串:
但是,所需的输出是将列名称作为单独的列:
解决方案讨论
值得注意的是,这种做法表明数据库设计存在缺陷。理想情况下,用户不应该知道列名称。更好的解决方案是在数据库中创建一个显式列来存储“列名称”。
不幸的是,无法将列名称设置为PreparedStatement 值。准备好的语句只能用于设置列值。
如果不可避免地要使用变量列名,则需要清理输入并手动构造 SQL 字符串。这涉及引用各个列名称并使用 String#replace() 对列名称中的引号进行转义。
以上是准备好的语句可以处理 SQL 查询中的动态列名吗?的详细内容。更多信息请关注PHP中文网其他相关文章!