php - 关联查询结果数组中的第一个值错误

标签 php mysql pdo fetch associative-array

这真的很奇怪...如果 pdo 获取模式是 assoc,它会返回错误的 id 列值。如果模式是两者,它会返回错误的“id”值,但 [0] 没问题。 表结构

mysql> describe itemweap;

+---------------------+-----------------+------+-----+---------+-------+
| Field               | Type            | Null | Key | Default | Extra |
+---------------------+-----------------+------+-----+---------+-------+
| id                  | int(11)         | NO   |     | NULL    |       |
| userID              | int(11)         | NO   |     | NULL    |       |
| Tier                | int(1)          | NO   |     | NULL    |       |
| damage              | int(7) unsigned | NO   |     | NULL    |       |
| MaxUpgrades         | int(2)          | NO   |     | NULL    |       |
| CurrentUpgradeLevel | int(2)          | NO   |     | NULL    |       |
| heroID              | int(1) unsigned | NO   |     | NULL    |       |
| status              | int(1) unsigned | NO   |     | NULL    |       |
| hash                | char(32)        | NO   | PRI | NULL    |       |
+---------------------+-----------------+------+-----+---------+-------+

代码

function performSingleQuery($DBH, $query,$data) {
    $STH = $DBH->prepare($query);
    if (!isset($STH))
        echo "STH NOT SET<br />"; 
    else if ($STH) {
        try {
            if (isset($data))
                $STH->execute($data);
            else $STH->execute();
            if ($STH->errorCode()[2] == 0) {
                return $STH->fetchAll(); 
            }
            else return null;
        }
        catch (PODexception $e) {
            echo $e->errorInfo;
            return null;
        }
    }
    return null;
}
function performQueryAndGenerateTable($isSearchSpecific, $query, $exNTAR, $DBH, 
    $isProfile, $tableName, $title, $mode) {
    $rows = performSingleQuery($DBH, $query, null);
    print_r($rows); //checking values here
    ...
}

查询示例:

SELECT A.id, A.userID, A.tier, A.damage, A.maxupgrades, A.heroID, A.CurrentUpgradeLevel, c.herohealth, d.heropower , e.herospellcastrate, f.heromovementspeed, g.herooffabpow, h.herodefabpow, i.itemweapeledmg, j.itemaddproj, k.defencehealth, L.defencepower, M.defencerange, N.defencespeed, O.itemweaprangedaltdmg, R.id, S.notes 
from itemweap A 
left join herohealth C on (C.id = A.id) 
left join heropower D on (D.id = A.id) 
left join herospellcastrate E on (E.id = A.id) 
left join heromovementspeed F on (F.id = A.id) 
left join herooffabpow G on (G.id = A.id) 
left join herodefabpow H on (H.id = A.id) 
left join itemweapeledmg I on (I.id = A.id) 
left join itemaddproj J on (J.id = A.id) 
left join defencehealth K on (K.id = A.id) 
left join defencepower L on (L.id = A.id) 
left join defencerange M on (M.id = A.id) 
left join defencespeed N on (N.id = A.id) 
left join itemweaprangedaltdmg O on (O.id = A.id) 
left join users R on (R.id = A.userID) 
left join notes S on (S.id = A.id) WHERE A.userID = 4 AND A.status = 1;

此查询结果来自mysql控制台 /image/yOLlK.jpg (非常宽的图像) id 列在这里很好。 print_r 输出

    Array ( [0] => Array ( [id] => 4 [userID] => 4 [tier] => 2 [damage] => 2 [maxupgrades] => 5 [heroID] => 3 [CurrentUpgradeLevel] => 5 [herohealth] => [heropower] => [herospellcastrate] => [heromovementspeed] => [herooffabpow] => [herodefabpow] => [itemweapeledmg] => 33 [itemaddproj] => [defencehealth] => [defencepower] => 55 [defencerange] => [defencespeed] => [itemweaprangedaltdmg] => [notes] => sdasdawdasdasda )

[1] => Array ( [id] => 4 [userID] => 4 [tier] => 2 [damage] => 155 [maxupgrades] => 5 [heroID] => 3 [CurrentUpgradeLevel] => 5 [herohealth] => [heropower] => [herospellcastrate] => [heromovementspeed] => [herooffabpow] => [herodefabpow] => [itemweapeledmg] => 55 [itemaddproj] => [defencehealth] => [defencepower] => 5 [defencerange] => [defencespeed] => [itemweaprangedaltdmg] => [notes] => ) 

[2] => Array ( [id] => 4 [userID] => 4 [tier] => 2 [damage] => 1200 [maxupgrades] => 3 [heroID] => 4 [CurrentUpgradeLevel] => 3 [herohealth] => 12 [heropower] => [herospellcastrate] => [heromovementspeed] => [herooffabpow] => [herodefabpow] => [itemweapeledmg] => 259 [itemaddproj] => 4 [defencehealth] => [defencepower] => [defencerange] => [defencespeed] => [itemweaprangedaltdmg] => 16 [notes] => ) ) 

每一行的 Id 值都被破坏。 但是如果我将获取模式更改为两者, print_r 会给我

Array ( [0] => Array ( [id] => 4 [0] => 90 [userID] => 4 [1] => 4 [tier] => 2 [2] => 2 [damage] => 2 [3] => 2 [maxupgrades] => 5 [4] => 5 [heroID] => 3 [5] => 3 [CurrentUpgradeLevel] => 5 [6] => 5 [herohealth] => [7] => [heropower] => [8] => [herospellcastrate] => [9] => [heromovementspeed] => [10] => [herooffabpow] => [11] => [herodefabpow] => [12] => [itemweapeledmg] => 33 [13] => 33 [itemaddproj] => [14] => [defencehealth] => [15] => [defencepower] => 55 [16] => 55 [defencerange] => [17] => [defencespeed] => [18] => [itemweaprangedaltdmg] => [19] => [20] => 4 [notes] => sdasdawdasdasda [21] => sdasdawdasdasda ) 

[1] => Array ( [id] => 4 [0] => 91 [userID] => 4 [1] => 4 [tier] => 2 [2] => 2 [damage] => 155 [3] => 155 [maxupgrades] => 5 [4] => 5 [heroID] => 3 [5] => 3 [CurrentUpgradeLevel] => 5 [6] => 5 [herohealth] => [7] => [heropower] => [8] => [herospellcastrate] => [9] => [heromovementspeed] => [10] => [herooffabpow] => [11] => [herodefabpow] => [12] => [itemweapeledmg] => 55 [13] => 55 [itemaddproj] => [14] => [defencehealth] => [15] => [defencepower] => 5 [16] => 5 [defencerange] => [17] => [defencespeed] => [18] => [itemweaprangedaltdmg] => [19] => [20] => 4 [notes] => ) 

[2] => Array ( [id] => 4 [0] => 83 [userID] => 4 [1] => 4 [tier] => 2 [2] => 2 [damage] => 1200 [3] => 1200 [maxupgrades] => 3 [4] => 3 [heroID] => 4 [5] => 4 [CurrentUpgradeLevel] => 3 [6] => 3 [herohealth] => 12 [7] => 12 [heropower] => [8] => [herospellcastrate] => [9] => [heromovementspeed] => [10] => [herooffabpow] => [11] => [herodefabpow] => [12] => [itemweapeledmg] => 259 [13] => 259 [itemaddproj] => 4 [14] => 4 [defencehealth] => [15] => [defencepower] => [16] => [defencerange] => [17] => [defencespeed] => [18] => [itemweaprangedaltdmg] => 16 [19] => 16 [20] => 4 [notes] => [21] => ) ) 

关联部分又错了,但索引部分没问题。如何使 fetch_assoc 返回正确的值?

最佳答案

id 键指的是查询中 R.id 的值。您需要为查询中的字段名称添加别名,以便它们都是唯一的。

例如:

选择 A.id AS A_id, .... ,R.id AS R_id ....

然后,您的关联数组将具有 A_idR_id 作为具有适当值的键。

关于php - 关联查询结果数组中的第一个值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25295564/

相关文章:

php - 如何在codeigniter中计算数据库中的行总数

php - 使用 rand() 从 MySQL 生成唯一的随机元素

php - 在 Yii 1.1.16 QueryBuilder 中的 SELECT 之前添加 SET STATEMENT

php - 从多个类别获取主题并显示前十个主题以及 mysql/php 中的响应

php - 如何使用 laravel 在 DOMPDF 中显示印地语字体?

php - 将 unicode 输入与数据库字符串进行比较

mysql - docker.io - 使用 Scala 连接到 MySQL

php - MS SQL Server 通过 Linux 上的 PHP 支持非模拟准备语句

php - 列表问题,GROUP mysql

php - PDO Mysql,想要更新甚至插入数据