使用varchar数据类型作为输入的PHP GET请求

时间:2018-02-05 12:08:08

标签: php mysql get

很抱歉,如果标题中的措辞不正确(PHP新手)。我正在尝试使用以下php脚本从mysql数据库返回结果。

php脚本

<?php

require "conn.php";

$adopt_id = $_GET["adopt_id"];

  $query = "
select *
from temp_table
where adopt_id = $adopt_id
";

....
?>

现在,如果我在浏览器中以上面的url运行上述内容,则会按预期返回http://localhost/searchfeed.php?adopt_id=1

转发上述查询:

select *
from temp_table
where adopt_id = 1

相同的php脚本,但在varchar数据类型的diff字段上进行过滤。

php脚本

    <?php

    require "conn.php";

    $GENDER = $_GET["gender"];

      $query = "
    select *
    from temp_table
    where gender = $GENDER
    ";

    ....
    ?>

现在,如果我在浏览器中以上面的url运行上面的内容,则返回null,因为它没有得到任何结果= http://localhost/searchfeed.php?gender=M

我将上述查询转储到日志文件中,似乎它对$ GENDER没有任何作用。这就是查询的样子

select *
from temp_table
where gender = 

3 个答案:

答案 0 :(得分:1)

这是因为您需要将非数字值放在单引号中。

select *
from temp_table
where gender = '$GENDER'

请同时查看Prevent SQL Injections

答案 1 :(得分:0)

正确应该是这样的。

<?php

require "conn.php";

$GENDER = $_GET["gender"];

  $query = "
select *
from temp_table
where gender = '".$GENDER."'";

....
?>

这样我们的查询即使ig $ GENDER值也是一个字符串。在之前的回答中,mysql将返回错误。

答案 2 :(得分:-1)

我在第二个语句中没有看到您的PHP代码有任何问题,但正如其他人所建议的那样,您的MySQL查询包含不正确的语句。

请将您的MySQL语句更新为:

select *
from temp_table
where gender = '$GENDER'

select *
from temp_table
where gender like '$GENDER'

还要考虑使用任何MySQL库,因为它通常包含各种安全补丁(如前面的答案中所述 - SQL注入)

或至少使用mysqli_real_escape_string()功能

编辑:问题最有可能通过不正确的变量名称拼写解决。 GET变量都存储在$_GET数组中。

此语句可以访问您的gender值: $gender = $_GET['gender'];

注意:对于其他人 - 小心拼写变量,如$ _GET $ GET