2014-04-11 81 views
0

在这个基本代码中,我检查特定用户和国家是否存在具有特定itemId的记录。函数外部的值与函数内部的值不同

该函数内部的记录返回1,但是当它在外面时,它是完全不同的。

function recordExists(&$d) { 
    global $conn, $userId, $userCountryCode; 

    $sqlFindRecord = "select count(itemId) as recordCount from onr_items_mod where itemTempId = :itemTempId and itemStatus IN(0,5,8) and itemPublishedStatus = 2 and itemUserId = :userId and itemUserCountryCode = :userCountryCode"; 

    $countRecord = $conn->prepare($sqlFindRecord); 

    $countRecord->execute(array(
     ":itemTempId" => $d, 
     ":userId" => $userId, 
     ":userCountryCode" => $userCountryCode 
    )); 

    $countRecord->bindColumn('recordCount',$d); 

    echo 'This is D '.$d.' ---'; 

    $row = $countRecord->fetch(); 

    if($d == 0) { 
     return $d; 
    } elseif ($d == 1) { 
     return $d; 
    } else { 
     return false; 
    } 
} 

$d = 'US01' 

if(recordExists($d) == 0) { //If the function returned 0 
    echo $d; 
    echo 'Was Zero'; 
} elseif (recordExists($d) == 1) { //If the function returned 1 
    echo $d; 
    echo 'Was One'; 
} else { 
    echo $d; 
    echo 'Neither Zero or One'; 
} 

在我完成上述操作后,它总是'不是零或一个'。为什么是这样?我尝试了整个早晨,但是却无法想出解决方法。

这工作,但不是上述

function counter(&$a) { 
    if($a == 0) { 
     return $a; 
    } elseif ($a == 1) { 
     return $a; 
    } else { 
     return false; 
    } 
} 

$a = 1; 

if(counter($a) == 0) { 
    echo $a; 
} elseIf (counter($a) == 1) { 
    echo $a; 
} else { 
    echo 'Umm...'.$a; 
} 
+0

为什么你通过引用传递'$ d'到函数? –

+0

因为'$ d'的值在函数内部发生了变化。 – Norman

+0

如果你改变它并且按值传递,那么只需要使用函数的返回值就会更简单。 –

回答

0

尝试插入到会话变量,而在另一个方法检索它。
希望它会有所帮助。

1

为什么它总是'不是零或一个'?让我们SEEE它是如何工作


1. $d = 'US01' 

2. if(recordExists($d) == 0) { //If the function returned 0 
3.  echo $d; 
4.  echo 'Was Zero'; 
5. } elseif (recordExists($d) == 1) { //If the function returned 1 
6.  echo $d; 
7.  echo 'Was One'; 
8. } else { 
9.  echo $d; 
10.  echo 'Neither Zero or One'; 
11. } 

首先$d等于US01。没关系。但通过#2 $d == 1之后,因为您已将其设置为功能(您已通过参考传递$ d)。 因此,如果#2行中的语句将返回false,因为thera是itemTempId ='US01'的数据库中的一些记录。

但现在在第二行if语句行#5变量$d = 1。所以我认为你没有在你的数据库中有这个itemTempId的记录。所以第二条语句(第5行)也会返回false。

在我看来,你不应该通过引用传递它。

编辑

如果你想检查项目中存在DATABSE然后yopu只可提出一次。我真的不知道你的目标是什么。但也许这会很好


$d = 'US01'; 
$ret = recordExists($d); 
if ($ret === 0) { 
    echo 'Was zero'; 
} elseif ($ret === 1) { 
    echo 'Was one'; 
} else { 
    echo 'Something else'; 
} 
+0

在这种情况下,我该如何解决这个问题? – Norman