Php 解析url在函数中无法正常工作

Php 解析url在函数中无法正常工作,php,function,parsing,Php,Function,Parsing,我有一个重定向数据库,我需要拉出URL,替换变量并重定向它们。我有一个函数,用于提取项目的URL和要替换的参数,但是当我调用我的支持函数来编辑参数时,parse_URL不起作用,我得到([PATH]=>)调用parse URL,然后再将URL传递给第二个函数。代码如下: function getURL($RID,$PID,$TEST) { //Skip this if it is a test: if(isset($TEST))

我有一个重定向数据库,我需要拉出URL,替换变量并重定向它们。我有一个函数,用于提取项目的URL和要替换的参数,但是当我调用我的支持函数来编辑参数时,parse_URL不起作用,我得到([PATH]=>)调用parse URL,然后再将URL传递给第二个函数。代码如下:

function getURL($RID,$PID,$TEST)
    {

        //Skip this if it is a test:
        if(isset($TEST))
            $numID = $PID;
        else {
            $numID = $this->getNumericID($PID);
        } 
        $redirectValue = $this->checkRedirect($RID,$numID);

        switch ($redirectValue) {
            case 1:
                $query = "select projecturl,hasparameters,ID from projects where projectnumber=:rid limit 1";
                $statement = $this->pdo->prepare($query);
                $statement->bindValue(':rid',$RID);
                $statement->execute();
                $result = $statement->fetch(PDO::FETCH_ASSOC);
                $url = $result["projecturl"];
                $query = "select parameter, `key` from d2crtest.parameters where projectID=:pid";
                $statement = $this->pdo->prepare($query);
                $statement->bindValue(':pid',$result["ID"]);
                $statement->execute();
                while ($row = $statement->fetch(PDO::FETCH_ASSOC))
                {
// if I put a return parse_url($url); here, it works
                    switch ($row["key"]) {
                        case 1:
                            $url = $this->addURLParameter($url, $row["parameter"], $numID);
                            ;                               
                            break;
                        (more code truncated)
在这段代码中,parse_url确实返回([PATH]=>)

为什么parse_url会在函数调用之前而不是之后工作


谢谢

您的代码中有以下错误(有些简化,但我希望您能理解):


我不知道为什么这样做,
addURLParameter()
应该返回一个url,这样来自PDO的每一行都会有一个新的url进行解析,但情况似乎并非如此,因此,我修改了
addURLParameter()
以使用解析过的url(),并这样调用它:
$url=$this->addURLParameter(parse_url($url),$row[“parameter”],$numID);
现在我得到一个结果:
(哪一个是正确的输出)

不,除非在两者之间发生了变化(例如引用,或者只是错误地使用了“另一个”
$url
变量)。您是否100%确定
getURL
中的
$url
addURLParameter
中的
addURLParameter
完全相同(
var\u dump
确保它们)?100%--我目前正试图修改它以解析\u url,然后修改查询,它可以工作…由于未知原因,addURLParameter无法解析\u url您确定它在第一个循环中,而不是在第二个循环中(第三个、第四个…)如果我看到您的
addURLParameter
函数(
return$url\u data;
是一个数组),那么它已经将
$url
变成了它的一个部分数组;“并获取$url或返回解析url($url)它按预期返回…更改它以处理解析的url似乎起作用了…好吧,目前的代码只能容纳d2crtest.parameters中的一个条目。在我看来,只要其中有2个或更多条目,它就会断开,因为
$url
不再是一个可解析的字符串,而是一个数组,
parse\U url(parse\U url($url));
当然是失败的。如果在
addURLParameter
中执行
return$url;
。可能应该在那里给我们实际的函数。很抱歉,在开关块之后有一个return$url;。当然(因为如果不是这样的话,它会解释错误):返回在while循环中(就在关闭
}
)之前?它在while之外,在外部开关的内部。如果这导致了错误,那是什么?我已经用解释编辑了我的答案(注释很简短)
function addURLParameter($url, $paramName, $paramValue) {
         $url_data = parse_url($url);
         return $url_data;    
// Initialize $url
$url = $result["projecturl"];
// $url will now be a string like '/example/project';
// ...
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
    $url = parse_url($url);
    // $url will now hold array('path' => '/example/project')
    // For the second row in your result-set (the second run of 
    // the while loop) that value will be given to parse_url(),
    // thus $url = parse_url(array(...)), resulting in NULL.
}

// Depending of the number of rows in your result-set, $url will be
// one of
// - '/example/project' (0 rows)
// - array('path' => '/example/project') (1 row)
// - NULL (even number of rows)
// - array('path' => '') (odd number of rows)
return $url;