【问题标题】:Echoing PHP Array Returns no Result回显 PHP 数组不返回任何结果
【发布时间】:2013-09-27 17:58:36
【问题描述】:

所以,伙计们,我的问题是我正在从 mysql 列创建一个数组,但是,当我回显数组项时,它什么也没给我返回,我有一阵子关于这个,我没有看到一个可能的错误,希望能得到一些帮助。这是我的代码:(我知道从 mysql 到 mysqli,但我才刚刚开始尝试逻辑的东西。:))

$duracao = mysql_query(
    "SELECT SUM(fim_periodo-inicio_periodo)/0.01666667 AS mysum
 FROM afunda_eleva_$a"
); //THIS $duracao IS INSIDE A FOR LOOP THAT EXECUTES THE QUERY IF A CONDITION IS SATISFIED (DEPENDING ON $a and $prevNum), it is working fine!

while ($row2 = mysql_fetch_assoc($duracao))
{
    $duracao_afunda_eleva[] = $row2['mysum'];
}

所以,为了测试一些可能的问题,我已经提出:

$i2 = sizeof($duracao_afunda_eleva);    
echo $i2;
echo <br>;

返回给我正确大小的数组,问题就在这里,我认为:

for($i1 = 0 ; $i1 < sizeof($duracao_afunda_eleva); $i1++)    
{
    echo $duracao_afunda_eleva[$i1] or die("couldn't echo"
    . mysql_error());        
    echo "<br>";    
}

这不会给我带来任何价值。我真的很感激任何建议。提前致谢!

【问题讨论】:

  • var_dump($duracao_afunda_eleva) 将准确地显示该数组中的内容。
  • 嗯,这给了我一个很好的结果,但不是很开心,数组的所有值都是 NULL。 :S 我认为问题可能出在我得到数组上的值的地方。谢谢!
  • 但这有点奇怪,因为数组的大小还可以!但值,不是,所以我认为:
    while ($row2 = mysql_fetch_assoc($duracao)) { $duracao_afunda_eleva[] = $row2['mysum']; }
    以某种方式工作。我会在这里尝试一下。
  • 因此您的查询运行正常,但为所有这些记录返回 sql NULL。例如你的总和不知何故失败了。
  • 我明白了,我会在这里尝试一些编码,如果有什么我会回来。 :) 谢谢。

标签: php mysql arrays echo


【解决方案1】:

尝试print_r 而不是 echo - echo 输出 (string)$variable,如果是数组,它只是“数组”。此外, echo 是一种语言构造而不是函数,因此您的 or die(...) 是有问题的,因为语言构造没有返回值。

通常最好不要使用or die(...) 构造,并正确处理问题(例如,使用定义的返回值,以便可以运行清理代码)。此外,无法使用 echo 输出任何内容将意味着您的 php/whatever 安装严重出错,此时您可能甚至无法到达代码中的那一行,即使那样它也没有任何事情可做用mysql。

【讨论】:

  • 嗯,我明白了。我只是在尝试 die 命令以寻找可能的问题。感谢您的提示,我会跟踪问题!
【解决方案2】:

由于问题不在变量中,请尝试在您的 MySQL 选择中使用别名:

SELECT SUM(fim_periodo-inicio_periodo)/0.01666667 as mysum

然后在你的PHP中,你可以得到$row2['mysum'];
可能解决不了问题,但这是一个好的开始。

【讨论】:

  • 操作,对不起,这是一个错误的输入。在代码上,变量是对的!
  • 请更新您的变量代码和别名,以便人们更好地看到它。
【解决方案3】:

我个人使用:

$arr = array ( /* ... */ );
echo "<pre>";
var_dump($arr);
echo "</pre>";

【讨论】:

  • (-1) php.net/manual/function.var-dump.php 不返回任何内容,因此额外的回显是毫无用处的。此外,echo 不是函数,因此您可以不使用括号。
  • 感谢您提供有关 var_dump 的信息。我个人过去曾在 echo 上使用括号,只是因为它对我来说看起来更干净。
【解决方案4】:

在你的最后一个for循环中,你使用了$i++,它应该是$i1++

【讨论】:

    【解决方案5】:

    快速提示是不要在 for 循环中使用 sizeof 函数。这将在循环的每次迭代中运行,如果将其移出循环(或改用foreach 循环),您会注意到性能有所提高。例如

    $count = sizeof($duracao_afunda_eleva);
    for($i = 0 ; $i < $count; $i++) {
        echo $duracao_afunda_eleva[$i] . '<br />';
    }
    

    // Foreach loop example
    foreach ($duracao_afunda_eleva as $key => $value) {
        echo $value . '<br />';
    }
    

    或者你也可以做这一行

    echo implode('<br />', $duracao_afunda_eleva);
    

    【讨论】:

    • 只是一个旁注:sizeof() 是 count() 的别名。 (我更喜欢 count(),因为 sizeof 也用在 C 中,虽然它在静态定义的数组上或多或少会做同样的事情,但 php 除了php.net/manual/en/class.splfixedarray.php 之外没有这些,实际上似乎没有多少人知道/使用...)
    【解决方案6】:

    使用此代码:

    for($i1 = 0 ; $i1 < sizeof($duracao_afunda_eleva); $i1++)    
    {
       echo $duracao_afunda_eleva[$i1] or die("couldn't echo". mysql_error());        
       echo "<br>";    
    }
    

    你增加了$i而不是$i1

    虽然对于数组,使用foreach 循环通常更容易。 这从数组中的第一个元素到最后一个元素运行。

    像这样:

    foreach ($duracao_afunda_eleva as $value) {
        echo $value;
    }
    

    我还建议删除$row2 ['mysum']中的空格:

    $duracao_afunda_eleva[] = $row2['mysum'];
    

    编辑

    现在才注意到,但是你的 fetch-statement 是错误的......它有一个错字:

    while ($row2 = mysql_fetch_assoc($duracao))
    

    确保它是 mysql 而不是 myqsl

    【讨论】:

    • 嗯,好的,这个 foreach 真的很“干净”。我已经进行了所有更改,但仍然没有结果。谢谢提示
    • @GustavoxD 我已经编辑了这个答案,因为我刚刚看到一个错字......也许这可以解决错误。
    • 这是另一个错误的输入,我的错。在代码上,它输入正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2017-12-09
    • 2020-10-03
    • 2017-03-19
    • 2017-05-20
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多