函数外的值与函数内的值不同

时间:2014-04-11 11:58:18

标签: php

在这个基本代码中,我检查特定用户和国家/地区的特定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;
}

2 个答案:

答案 0 :(得分:1)

它总是'零或一个'为什么?让我们看看它是如何运作的


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,则beacuse thera是数据库中的一些记录,其中itemTempId ='US01'。

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

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

修改

如果你想检查数据库中是否存在项目,那么yopu只能询问一次。我真的不知道你的目标是什么。但也许这会很好


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

答案 1 :(得分:0)

尝试将其插入会话变量并以另一种方法检索它 希望它会有所帮助。