Parse_url在函数中无法正常工作

时间:2014-03-17 21:26:44

标签: php function parsing

我有一个重定向数据库,我需要提取网址并替换变量并重定向它们。我有一个函数可以提取项目的URL和要替换的参数,但是当我调用我的支持函数编辑参数时,parse_url不起作用,我得到([PATH] =>)调用解析将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] =>)

function addURLParameter($url, $paramName, $paramValue) {
         $url_data = parse_url($url);
         return $url_data;    

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

由于

2 个答案:

答案 0 :(得分:0)

您的代码中出现以下错误(有些简化,但我希望您明白这一点):

// 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;

答案 1 :(得分:0)

我不确定为什么会这样,addURLParameter()应该返回一个url,因此PDO中的每一行都会有一个新的URL进行解析,但似乎并非如此,所以,我修改了addURLParameter()以使用parsed_url()并将其调用为:$url = $this->addURLParameter(parse_url($url), $row["parameter"], $numID);现在我得到了结果:http://sometestserver.com/test/register.html?para1=test123&param2=Case4  (这是正确的输出)