You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何mysqli_query无法执行SQL注入?需改用mysqli_multi_query

为什么mysqli_query无法执行堆叠SQL注入,而mysqli_multi_query可以?

嘿,这个问题其实戳中了mysqli两个核心函数的设计差异,我来帮你拆解清楚:

1. mysqli_query的核心限制:一次只能执行单条SQL语句

mysqli_query从设计上就不支持多语句(堆叠)执行——它会把你传入的整个字符串当作一条完整的SQL语句去解析。

看你拼接后的SQL:

SELECT * FROM users WHERE name = ''; DROP TABLE testTable --'

MySQL会把这个字符串当作单条语句处理:第一个'闭合了name的取值,后面的; DROP TABLE testTable --'就成了语法错误的冗余内容,自然会抛出你看到的语法错误。这是mysqli的安全设计之一,默认防止恶意的堆叠注入。

2. 为什么有些教程说mysqli_query能实现注入?

那些教程里的注入大概率是单语句注入,比如输入' OR 1=1 --,拼接后的SQL是:

SELECT * FROM users WHERE name = '' OR 1=1 --'

这是一条完全合法的单语句,mysqli_query可以正常执行,能返回所有用户数据——这属于逻辑篡改的注入,不需要执行多条语句,所以用mysqli_query就能生效。

而你尝试的是堆叠注入(在一条请求里执行多条独立的SQL语句),这种场景必须使用专门设计的mysqli_multi_query,它就是用来处理多语句执行的函数。

3. 额外验证:试试单语句注入

如果你在表单里输入' OR 1=1 --,用你当前的代码(mysqli_query)就能成功执行,返回所有users表的数据——这就是教程里说的“用mysqli_query实现注入”的场景,和你尝试的堆叠注入不是一回事。

总结一下:

  • 单语句注入(篡改现有SQL逻辑):mysqli_query可以执行
  • 堆叠注入(执行多条独立SQL):必须用mysqli_multi_query

内容的提问来源于stack exchange,提问作者Jelly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:26:21