php GET命令的细微之处

时间:2014-03-06 01:48:25

标签: php

我有一个页面,我试图从URL栏中检索一个值,然后在sql调用中用作参数。但是我遇到了一些问题。

网址为XXXXXXXXXX.php?mid = 314

我的代码顶部有

$mid = (int)trim($_GET['mid']," "); // Method A: This version does not work
$mid = 314; // Method B: This version does work


$mission = $db->getTableInfoForMission($mid); 
// This is the sql call that works for Method B and fails for Method A.

我输出了$ mid的值,它似乎是314,是否有我遗漏的东西?

由于

编辑*

尝试// var_dump($ mid);死();对于这两种情况,我得到int(314),但仍然有一种方法失败而另一种方法没有。我得到方法A

的SQL语法失败

4 个答案:

答案 0 :(得分:1)

尝试删除(int)强制转换并从trim()函数中删除第二个参数,因为trim()函数默认删除任何空格

$mid = trim($_GET['mid']);

答案 1 :(得分:1)

不一定是您特定问题的答案,但有价值的资源是查看$_SERVER['REQUEST_URI']。这将为您提供顶级域之后的所有内容,并通过一些字符串操作,您可以做一些非常有用的东西。

答案 2 :(得分:1)

我甚至不打扰trim。一个简单的

if (!isset($_GET['mid'])) {
    throw new RuntimeException('Required query param "mid" is missing');
}

$mid = (int) $_GET['mid'];

应该就是您所需要的一切。

还要确保在开发环境(php.ini

中配置了正确的错误报告和显示
error_reporting = E_ALL
display_errors = On

答案 3 :(得分:0)

如果您的网址为XXXXXXXXXX.php?mid=314,则在调用mid时,$_GET XXXXXXXXXX.php索引将设置为314,除非您的网络服务器做鬼鬼祟祟的事......

$mid = trim($_GET['mid']); // No need to specify " ", that's natural behaviour.

考虑使用is_integer($mid)检查类型,并确保 nothing 绝对干扰$mid的值。以下调试调用也可能对您有所帮助:

  • var_dump($mid); die(); - 在分配$mid
  • 之后
  • var_dump($_GET); die(); - 一开始。