【发布时间】:2019-06-08 17:14:45
【问题描述】:
我有一个代码应该从 mysql 数据库表中读取所有行。 但是,它并没有显示表格中的所有数据。
$array 应该包含所有行,但只包含第一行。
我的 module_cmds 数据库中有三行
+--------+------+----+--------------------+
| module | hash | id | serverId |
+--------+------+----+--------------------+
| music | 1 | 1 | 231870365863903232 |
| rule34 | 1 | 2 | 231870365863903232 |
| logs | 1 | 3 | 231870365863903232 |
+--------+------+----+--------------------+
仅供参考,count($reponses) = 1
尝试更改 ORDER BY
仅供参考,$array,之前在代码中使用过,但我认为它不会改变什么
$array = array();
$reponses = $bdd->query('SELECT * FROM module_cmds WHERE serverId=' . $donnees['server_id'] . ' ORDER BY module');
while ($donnee = $reponses->fetch()){
$array_param = array();
$reponses = $bdd->query('SELECT * FROM module_params WHERE idModule=' . $donnee['id']);
while ($donne = $reponses->fetch()){
$array_param_in = array( 'param' => $donne['paramName'],
'value' => $donne['value']);
array_push($array_param,$array_param_in);
}
$array_in = array( 'module' => $donnee['module'],
'hash' => $donnee['hash'],
'params' => $array_param);
array_push($array,$array_in);
}
对于 ORDER BY 模块,答案是
"modules":[{"module":"logs","hash":"1","params":[]}]
对于 ORDER BY id,答案是
"modules":[{"module":"music","hash":"1","params":[]}]
答案应该是
"modules":[{"module":"logs","hash":"1","params":[]},
{"module":"music","hash":"1","params":[]},
{"module":"rule34","hash":"1","params":[]},]```
我认为错误来自SQL,但是
'SELECT * FROM module_cmds WHERE serverId = 231870365863903232 ORDER BY module'
工作正常。
我的错误在哪里?这是我对 Php 中的数组一无所知的事情吗?一些错字?有几行我忘记了?
仅供参考,我有一个类似的代码,我不会在另一个 SQL 表中进入,它在那里完美运行。
【问题讨论】:
-
查找连接,通过连接,DBMS 可以一次性计算出结果集,您不需要对每一行进行第二次查询,这很昂贵。
-
您在循环内覆盖
$reponses,因此您将永远看不到其他ID。使用 2 个不同的变量名称或按照建议使用 JOINS。 -
是的,这就是覆盖问题。谢谢。也会尝试加入。