【问题标题】:1 var works, 1 doesn't. Why?1个var有效,1个无效。为什么?
【发布时间】:2013-12-08 02:50:29
【问题描述】:

在开始之前,我知道我正在使用过时的方法,应该学习 PDO...

<?php 
    $f = mysql_query("SELECT featured, date_featured FROM pins WHERE id='$pinDetails->id'") or die(mysql_error());

    while($g = mysql_fetch_array($f)) 
        $feature = $g['featured'];

    $on = $g['date_featured'];
?>

但是当我回声时...

&lt;?php echo $feature; ?&gt; 有效,但 &lt;?php echo $on; ?&gt; 无效。

代码有什么问题?

【问题讨论】:

  • 不代表有什么错误吗?
  • 那么date_featured在结果中有什么值?
  • 该值是 Y-m-d H:i:s 格式的日期戳,但没有显示,没有错误,只是空白。
  • @Hanky웃Panky fetch_array 返回一个包含数字键和关联键的数组(我之前没有纠正过你吗?)
  • 它没有被打印,因为它超出了 while() 循环

标签: php echo var


【解决方案1】:

您没有在 while 循环的主体周围放置大括号,因此您的代码相当于:

while ($g = mysql_fetch_array($f)) {
    $feature = $g['featured'];
}
$on = $g['date_featured'];

所以在循环结束之前它不会尝试设置$on。当mysql_fetch_array() 返回false 时它完成,它分配给$g。所以你在做:

$on = false['date_featured'];

由于您显然只是得到一行,因此您不需要while 循环。随便写:

$g = mysql_fetch_assoc($f);
$feature = $g['featured'];
$on = $g['date_featured'];

为什么你在不需要的时候写了一个循环?我在 SO 上看到这个所有时间,但我不明白。您是否只是从其他程序中复制代码,而没有真正理解为什么要这样编写?

并养成始终ifwhileforeach 等语句的主体周围放置大括号的习惯,即使主体中只有一个语句。这样,当您添加第二条语句时,您就不会冒忘记在它们周围添加大括号的风险,我怀疑这就是您最终陷入困境的原因。

另外,使用一个体面的 IDE,它的编辑器缩进代码以反映结构。然后你可能会注意到第二个语句不在循环中。

【讨论】:

  • 感谢您的解释。我没有意识到大括号,我从它工作的地方 c&p'd 代码,只是更改了变量 - 甚至没有考虑我试图从数据库中得到什么
猜你喜欢
  • 2018-11-16
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 2022-06-13
  • 2023-01-06
  • 2019-02-10
  • 2014-07-14
  • 2012-02-05
相关资源
最近更新 更多