Php 解析url在函数中无法正常工作
我有一个重定向数据库,我需要拉出URL,替换变量并重定向它们。我有一个函数,用于提取项目的URL和要替换的参数,但是当我调用我的支持函数来编辑参数时,parse_URL不起作用,我得到([PATH]=>)调用parse URL,然后再将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))
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;