我正在使用fetch(PDO :: FETCH_ASSOC)从SQL查询返回多行。此函数仅返回整数列的第一位。例如,我期望的是“ 59”,而我得到的是“ 5”。我编写的查询返回四列,其中三列为整数,一列为字符串(varchar)。字符串列正常工作,但整数列在第一位数字后被截断。

此代码嵌套在更高级别的查询中,并且我成功提取了查询中使用的变量。

为了确定问题,我回显输出并将其与在MySQL中运行SQL语句时得到的结果进行比较。

正确的数据:

php - PDO::FETCH_ASSOC仅返回整数的第一位-LMLPHP

数据不正确:

php - PDO::FETCH_ASSOC仅返回整数的第一位-LMLPHP

$picksQry = $dbcnx->prepare("SELECT gi.gameNo AS gameNo
    , p.pickCD as pickCD
    , t.teamName as teamName
    , p.isLock as isLock

    FROM NCF_gamesInLeague gi JOIN NCF_games g ON gi.gameID = g.gameID
    JOIN ALL_usersInLeague ui ON gi.leagueID = ui.leagueID
    LEFT JOIN NCF_picks p ON gi.gilID = p.gilID AND p.uilID = :uilIDZ
    LEFT JOIN ALL_teams t ON p.pickCD = t.teamCD

    WHERE g.weekID = :week
    AND g.season = :year
    AND ui.userID = :usersID
    AND ui.leagueID = :leagueID

    ORDER BY gameNo ASC");

$picksQry->execute(array(
    ':uilIDZ' => $uilIDZ
, ':week' => $week
, ':year' => $year
, ':usersID' => $userIDZ[$leagueCnt][$userCnt]
, ':leagueID' => $leagueID[$leagueCnt]
));

$picksRow = $picksQry->fetch(PDO::FETCH_ASSOC);

$picksCnt = 1;

while ($picksRow == true) {
    $gameNo[$leagueCnt][$userCnt][$picksCnt] = $picksRow['gameNo'];
    $pickCD[$leagueCnt][$userCnt][$picksCnt] = $picksRow['pickCD'];
    $teamName[$leagueCnt][$userCnt][$picksCnt] = $picksRow['teamName'];
    $isLock[$leagueCnt][$userCnt][$picksCnt] = $picksRow['isLock'];
    $picksRow = $picksQry->fetch(PDO::FETCH_ASSOC);

    $picksCnt++;

}


该查询的第一行应为“ 1”,“ 59”,“ Miami FL”,“ 0”,但我得到的是“ 5”而不是“ 59”;随着循环的进行,任何大于10的数字只会返回其第一位数字。

编辑:我按照下面的建议添加了print_r($ picksRow)并获得了我期望的数组,但是回显的数据仍然不正确。
 我更新了代码以包括print_r来查看数组。该数组是正确的,但是回显的数据仍然不正确:
数组:([gameNo] => 1 [pickCD] => 59 [teamName] => Miami FL [isLock] => 0)
数据:游戏号= 1 | pickCD = 5 | teamName =迈阿密FL | isLock = 0

while循环现在是:

while ($picksRow = $picksQry->fetch(PDO::FETCH_ASSOC)) {

                print_r($picksRow);

                $gameNo[$leagueCnt][$userCnt][$picksCnt] = $picksRow['gameNo'];
                $pickCD[$leagueCnt][$userCnt][$picksCnt] = $picksRow['pickCD'];
                $teamName[$leagueCnt][$userCnt][$picksCnt] = $picksRow['teamName'];
                $isLock[$leagueCnt][$userCnt][$picksCnt] = $picksRow['isLock'];

                echo '&nbsp &nbsp &nbsp &nbsp &nbsp GameNo ='.$gameNo[$leagueCnt][$userCnt][$picksCnt]
                    .' | pickCD = '.$pickCD[$leagueCnt][$userCnt][$picksCnt]
                    .' | teamName = '.$teamName[$leagueCnt][$userCnt][$picksCnt]
                    .' | isLock = '.$isLock[$leagueCnt][$userCnt][$picksCnt].'<br>';

                $picksCnt++;

            }

最佳答案

我相信找到了问题。它似乎与我如何命名变量有关。我之前有一个名为“ $ pickCD [$ leagueCnt] [$ gi]”的变量,后来有一个变量“ $ pickCD [$ leagueCnt] [$ userCnt] [$ picksCnt]”。我将后面的变量重命名为$ pickCDX,它可以正常工作。 Bambo,waterloomatt和Raymond,感谢您为我指出了发现此错误的正确方向。

我不确定这会如何影响我的输出,因为$ pickCD [1] [1]与$ pickCD [1] [1] [1]并没有不同吗?也许有很多智慧的人可以解释一下。无论如何,请注意如何命名变量,尤其是在嵌套循环语句中。

10-08 16:32