0

有没有办法让我做这样的选择

select * from attributes where product_id = 500

会回来

id  name     description
 1  wheel    round and black
 2  horn     makes loud noise
 3  window   solid object you can see through

和查询

select * from attributes where product_id = 234

将返回与对该表的任何查询相同的结果。

现在显然我可以删除 where 子句并继续我的一天。但这涉及编辑我真的不想修改的代码,所以我试图在数据库级别修复这个问题。

那么是否有一种“神奇”的方式来忽略 where 子句中的内容并使用视图或其他东西返回我想要的任何内容?

4

5 回答 5

3

即使有可能,我怀疑它会起作用。这两个 WHERE 子句都希望返回一个东西,因此代码可能只使用返回的第一行,而不是全部。

它还将为数据库提供一种行为,使未来的开发人员竭尽全力试图理解。

正确执行并修复代码。

于 2008-12-03T21:59:35.490 回答
2

或者您可以传递“product_id”而不是整数,如果没有代码检查...所以查询将变为:

select * from attributes where product_id = product_id;

这会给你表格中的每一行。

于 2008-12-03T22:05:54.713 回答
2

如果您无法编辑查询,也许您可​​以附加到它?你可以坚持

OR 1=1

最后。

于 2008-12-04T08:51:30.930 回答
1

您可能能够使用结果集元数据来获得所需的内容,但结果集不会有字段描述。从准备好的查询中获取结果集元数据的特定 API 因编程语言而异,而且您还没有说明您使用的是哪种语言。

您可以查询产品表的INFORMATION_SCHEMA

SELECT ordinal_position, column_name, column_comment
FROM INFORMATION_SCHEMA.columns
WHERE table_name = 'products' AND schema_name = 'mydatabase';

您可以将数据库重组为实体-属性-值设计,但这比修复代码要雄心勃勃得多。

或者您可以完全放弃 SQL 数据库,而使用像RDF这样的语义数据存储,它允许您以与查询数据相同的方式查询实体的元数据。

于 2008-12-03T22:59:15.510 回答
0

就这个想法而言,我总是对做事的疯狂方式感兴趣。我认为我能想出的最佳解决方案是使用一个视图,该视图使用产品表获取所有产品,然后使用属性表获取属性,因此每个可能的产品都被考虑在内,所有产品都会得到相同的结果

于 2008-12-04T00:19:22.197 回答