在函数内访问动态创建的变量

时间:2012-06-17 01:05:21

标签: php mysql

嗨,我一直在努力解决这个问题,所以希望有人知道答案。

在我的脚本顶部,我动态设置一个变量,如下所示: $p_id = $_GET['p_id'];

然后我尝试以三种不同的方式将此变量传递给以下函数,但没有任何运气。

1)

public function Insert_Update($uid,$update,$uploads,**$p_id**) 
{
.....        

$query = mysql_query("INSERT INTO `messages` (message, uid_fk, poster_id,ip,created,uploads) VALUES ('$update', '$uid',
**'$p_id'**, '$ip','$time','$uploads')") or die(mysql_error());....

有趣的是,如果我将参数的顺序更改为($p_id,$uid,$update,$uploads),则此方法适用于变量,但其他三个变量对函数不可见。

2)

public function Insert_Update($uid,$update,$uploads) 
{...

     // ... global **$p_id**;

        $query = mysql_query("INSERT INTO `messages` (message, uid_fk, poster_id,ip,created,uploads) VALUES ('$update', '$uid',
        **'$p_id'**, '$ip','$time','$uploads')") or die(mysql_error());....

3)

public function Insert_Update($uid,$update,$uploads) 
{
     ....
      //  $query = mysql_query("INSERT INTO `messages` (message, uid_fk, poster_id,ip,created,uploads) VALUES ('$update', '$uid',
     '".$_REQUEST[**'p_id'**]."', '$ip','$time','$uploads')") or die(mysql_error());...

无论采用何种方法,我都会尝试使用该功能。有任何想法吗?感谢

2 个答案:

答案 0 :(得分:2)

不要只使用$p_id = $_GET['p_id'];,而是确保$_GET['p_id']具有值。请尝试以下代码:

$p_id = isset($_GET['p_id'])? $_GET['p_id'] : "some default value";

或者,如果您想在未设置变量时抛出错误,请尝试以下操作:

if(isset($_GET['p_id']))
{
    $p_id = $_GET['p_id'];
}
else
{
    echo "Please set 'p_id' and try again.";
    exit();
} 

此外,作为一般经验法则,如果可能,请避免在其外部定义的函数中使用相同的变量名称。例如。在您的函数中尝试将其命名为$pid而不是$p_id,因为这也是在函数外部使用的变量。

修改 而不是将$p_id定义为常量,然后将其添加到$GLOBALS数组,然后将其传入,只需确保设置$p_id,然后将其传入。例如:

$p_id = isset($_GET['p_id'])? $_GET['p_id'] : 2;

public function Insert_Update($uid,$update,$uploads,$pid) 
{
.....        

$query = mysql_query("INSERT INTO `messages` (message, uid_fk, poster_id,ip,created,uploads) VALUES ('$update', '$uid',
'$pid', '$ip','$time','$uploads')") or die(mysql_error());....
}

Insert_Update(1, "some text", "some file", $p_id);

答案 1 :(得分:1)

你只是通过创建一个新变量来浪费记忆。

$_GET['p_id']可在任何范围内访问,因此无论您在何处访问它,它都会自动显示。这比尝试将常规变量传递给它要容易得多。