【问题标题】:get PDO search result in an array在数组中获取 PDO 搜索结果
【发布时间】:2014-03-01 14:50:56
【问题描述】:

我有一个 PDO 查询来选择同一日期过去五年的日记:

$sql = 'select * from diary where dtime in (?,?,?,?,?) order by dtime desc';
$result = $db->prepare($sql);
$result->execute($fiveYears); //pass in the $fiveYear array of five dates like 2014-03-01, 2013-03-01 ~ 2010-03-01

然后我使用这样的 foreach 循环回显结果:

foreach($result as $row){
~~echo table contents here~~
}

我想在五个表中显示内容,即使那一年没有内容,但 foreach 循环只回显有内容的日期。所以如果有 2014-03-01 和 2012-03-01 的内容,结果是:

  • 2014-03-01:日记内容
  • 2012-03-01:日记内容

但我想让它显示出来

  • 2014-03-01:日记内容
  • 2013-03-01:空
  • 2012-03-01:日记内容
  • 2011-03-01:空
  • 2010-03-01:空

您能帮我了解如何实现这一目标吗? 我应该将 $fiveYear 数组与结果数组结合起来吗?如何? 我应该在 PHP 中使用 in_array 吗? 还是有更好的方法来做到这一点? 谢谢!

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    嗯,因为这个简单的任务需要比当地人更多的理解(甚至需要阅读问题正文!)

    $date_start = '2012-03-01';
    $date_end   = '2012-03-31';
    $range      = array();
    $date       = $date_start;
    while ($date <=  $date_end)
    {
        $range[] = $date;
        $date    = date("Y-m-d", strtotime("$date + 1 day"));
    }
    
    $sql = 'select * from diary where dtime BETWEEN ? AND ? order by dtime desc';
    $stm = $db->prepare($sql);
    $stm->execute(array($date_start, $date_end));
    $result = array();
    while ($row = $stm->fetch())
    {
        $result[$row['dtime']] = $row;
    }
    ?>
    <?php foreach ($range as $day): ?>
    <?=$day?>:
    <?php if (isset($result[$day])): ?>
    diary entry <?=$result[$day]['title']?>
    <? else: ?>
    empty
    <? endif ?>
    

    但是,如果 dtime 包含日期时间值,顾名思义,它将不起作用。您需要在查询中选择 DATE(dtime) as dtime, * 然后

    【讨论】:

    • 感谢 cmets :) 将问题阅读了大约 4 次,但仍然误解了它,直到我阅读了您的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多