将工作选择计数sql更改为准备好的语句后,它始终给出空结果。当我为真实数据替换占位符时,我得到正确的结果。因此,我怀疑绑定值存在问题,但是根本看不出问题可能是什么?我试过$ aData = $ stmt-> fetchAll()和$ count = $ stmt-> fetchColumn()。两者都给出空结果。另外,只需选择*(忽略计数)即可得到空结果。
预期结果:alUitgenodigd:3
function al_uitgenodigd($dbh,$uitdagerID,$uitgedaagdeID){
echo '<br>F:'.$uitdagerID; // correct on screen
echo '<br>F:'.$uitgedaagdeID; // correct on screen
/* prevent multiple pending requests between two players with the same originator */
$sql = "SELECT COUNT(*) AS alUitgenodigd
FROM games
WHERE
gameMessage = 'playerInvited'
AND
(
(messageFrom = 'white' AND whitePlayer = :uitdagerID AND blackPlayer = :uitgedaagdeID)
OR
(messageFrom = 'black' AND whitePlayer = :uitgedaagdeID AND blackPlayer = :uitdagerID)
) ";
// prepare
$stmt = $dbh->prepare($sql);
// bind values
$stmt->bindValue(':uitdagerID', $uitdagerID);
$stmt->bindValue(':uitgedaagdeID', $uitgedaagdeID);
//$aData = $stmt->fetchAll();
//return $aData; // empty array
$count = $stmt->fetchColumn();
echo 'Test: '.$count; // empty $count
if($count >= 1 ){return true;}
return false;
}
原始功能仍然有效:
function al_uitgenodigd($uitdager,$uitgedaagde)
{
/* prevent multiple pending requests between two players with the same originator */
$q = "SELECT COUNT(*) AS alUitgenodigd
FROM games
WHERE
gameMessage = 'playerInvited'
AND (
(messageFrom = 'white' AND whitePlayer = '".$uitdager."' AND blackPlayer = '".$uitgedaagde."')
OR
(messageFrom = 'black' AND whitePlayer = '".$uitgedaagde."' AND blackPlayer = '".$uitdager."'))";
if(onevalue($q) > 0)
return true;
return false;
}
我没咖啡了。因此,非常感谢您提供任何帮助!
((shame,shame,shame)=>花2个小时,因为我只是忘记了execute()......问题现在解决了。