MYSQL 查询行为异常

标签 mysql innodb

所以我有这个问题

 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/

相关文章:

mysql - 如何在mysql查询中插入今天的日期?

MySql/Wordpress 从某些链接中去除文件扩展名

php - 尝试比较 PDO 语句

mysql - 连接上的 WHERE 子句使执行时间增加 4 秒

python - 使用 SQLAlchemy 的多列键

mysql - Doctrine2 多级单表继承(未知列)

mysql - MySQL中查询的疑惑

sql - MySQL InnoDB 只锁定受影响的行?

mysql - 使用 LIKE '% term %' 的查询非常慢

mysql - 计算唯一行性能