我有一个重定向数据库,我需要提取网址并替换变量并重定向它们。我有一个函数可以提取项目的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在函数调用之前可以工作而不是之后?
由于
答案 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¶m2=Case4
(这是正确的输出)