php - PDO::FETCH_ASSOC 只返回整数的第一位
问题描述
我正在使用 fetch(PDO::FETCH_ASSOC) 从 SQL 查询中返回多行。此函数仅返回整数列的第一个数字。例如,我期待“59”,我得到“5”返回。我写的查询返回四列,其中三列是整数,一列是字符串(varchar)。字符串列正在工作,但整数列在第一个数字之后被截断。
此代码嵌套在更高级别的查询中,我成功地提取了查询中使用的变量。
为了确定问题,我回显输出并将其与我在 MySQL 中运行 SQL 语句时得到的结果进行比较。
正确数据:
不正确的数据:
$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)
数据:GameNo =1 | 选择CD = 5 | teamName = 迈阿密佛罗里达 | 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 '          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] 不同吗?也许有更多智慧的人可以解释这一点。无论如何,请注意如何命名变量,尤其是在嵌套循环语句中。
推荐阅读
- perl - YAML::XS 可以尊重 UseAliases=0 吗?
- list - 在哪里可以概览来自 Azure 中的 IOT 设备的消息?
- angular - 如何将获取的数据传递给服务?
- javascript - 我开始学习javascript。如何添加另一个滚动功能?
- python - Librosa STFT 时间箱不是从 0 秒开始
- csv - 在 awk 中为每一列打印行和其他行值的总和
- python - ruamel.yaml 正在咀嚼字符串值的引号
- php - 未正确验证添加到购物车。仍然可以购买比库存更多的库存
- wordpress - 如何在 WordPress 中为空类别显示自定义消息而不是“未找到结果”?
- javascript - Promise.then 在前一个 .then 之前被解决,foreach 完成