PHP& SQL Space问题

时间:2014-12-12 19:23:15

标签: php mysql sql mysqli

我遇到了一个奇怪的问题,请看一下这段代码:

$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;]只包含空格后面的单词。为什么呢?

1 个答案:

答案 0 :(得分:1)

最有可能的是,$_POST['name']实际上不是 test test,因为如果是,并且你说的其余部分都是真的,那就行了。

话虽如此:不要这样做

永远$_POST个变量(或来自&#34;外部&#34;的任何其他未经验证的数据)直接放入查询字符串中。它会向您开放SQL injection。您应该使用预备语句,在PDOMySQLi上阅读。