在这个基本代码中,我检查特定用户和国家/地区的特定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 :(得分: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)
尝试将其插入会话变量并以另一种方法检索它 希望它会有所帮助。