2014-04-11 133 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