我遇到了一个奇怪的问题,请看一下这段代码:
$query="SELECT device_name, ip, method, port
FROM devices
WHERE device_name='".$_POST['name']."'";
当我发布' name' - > '测试' (没有空格的文本)它可以工作(返回我想要的一些值)。 但在这种情况下,例如' name' - > '测试测试' (带空格的文本)它返回空值,但不应该。
最后,当我尝试这个时:
$query="SELECT device_name, ip, method, port
FROM devices
WHERE device_name='test test'";
它返回了我想要的值。
为什么在我的SQL代码中使用$_POST['name']
时会出现问题?
当然,我已尝试将$_POST['name']
保存在变量中,然后将其放入SQL代码中,同时使用( `` )
,( [ ] )
而不是('')
不会做的伎俩。我正在使用MySQL。
有什么想法吗?
$ _POST [' name']的var_dump():
<pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'WIM'</font> <i>(length=3)</i>
我知道,$ _POST [&#39; name&#39;]只包含空格后面的单词。为什么呢?
答案 0 :(得分:1)
最有可能的是,$_POST['name']
实际上不是 test test
,因为如果是,并且你说的其余部分都是真的,那就行了。
话虽如此:不要这样做
永远将$_POST
个变量(或来自&#34;外部&#34;的任何其他未经验证的数据)直接放入查询字符串中。它会向您开放SQL injection。您应该使用预备语句,在PDO或MySQLi上阅读。