所以我有这个问题
SELECT COUNT(b.user_ticket_id) as tiketscount
FROM event_tickets a
INNER JOIN user_tickets b ON a.event_ticket_id = b.event_ticket_id
WHERE b.status = 'used' AND a.event_id = '1'
这给了我预期的结果(计数 = 1),我决定尝试下面的代码查询
SELECT COUNT(b.user_ticket_id) as tiketscount
FROM event_tickets a
INNER JOIN user_tickets b ON a.event_ticket_id = b.event_ticket_id
WHERE b.status = 'used' AND a.event_id = '1 DROP TABLE contact "1=1"'
我得到了与之前相同的结果,但是当我像下面那样将 1 更改为 2 时,没有结果,mysql 是否可能正在使用它找到的第一个字符?
SELECT COUNT(b.user_ticket_id) as tiketscount
FROM event_tickets a
INNER JOIN user_tickets b ON a.event_ticket_id = b.event_ticket_id
WHERE b.status = 'used' AND a.event_id = '2 DROP TABLE contact "1=1"'
有人知道为什么这是可能的吗?谢谢
我使用的是 MYSQL 5.5.30 InnoDB
最佳答案
event_id 是某种数字列类型(可能是 INT),因此 MySQL 正在将您的字符串 '1 DROP TABLE contact "1=1"'
转换为 1
使其与第一个查询相同。
在第三个查询中,它也尽力转换值,并做同样的事情,将查询提炼为:
SELECT COUNT(b.user_ticket_id) as tiketscount FROM event_tickets a INNER JOIN user_tickets b ON a.event_ticket_id = b.event_ticket_id
WHERE b.status = 'used' AND a.event_id = 2
我假设没有 event_id
为 2 且 status
为“used”的记录。
如果您的列是 INT 而不是某种形式的文本,则无需将您的数字括在引号中,实际上不鼓励这样做。
关于MYSQL 查询行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17842490/