【问题标题】:PDO: PHP foreach array returning nullPDO:PHP foreach 数组返回 null
【发布时间】:2016-07-18 05:13:21
【问题描述】:

我做了一个非常简短的PHP。

输出是 json 格式的数组。但是它不起作用。

数组项始终为空。

我想这一定与错误调用db表列有关

('id' => $row->MASTER_ID)。

而 'MASTER_ID' 是我的数据库中列的名称。

如果有人能指出我正确的方向,我会非常高兴。 我的脚本如下所示:

<?php
$db = new PDO('mysql:host=xxx;dbname=xx;charset=utf8mb4', 'xx', 'xxx');
$month = date('Y-m');
$monthwild = "$month%";
$sql   = ("SELECT * FROM MASTER WHERE START_DATE LIKE '". $monthwild ."'");
$out = array();

foreach($db->query($sql) as $row) {
    $out[] = array(
        'id' => $row->MASTER_ID,
        'title' => $row->MASTER_TITLE,
        'start' => strtotime($row->MASTER_START),
        'end' => strtotime($row->MASTER_END)
    );
} 

echo json_encode(array('success' => 1, 'result' => $out));
exit;
?>

我是 PDO 的新手(以前用 mysql 做这样的事情)和

我还没有得到它,也没有找到合适的资源

【问题讨论】:

标签: php mysql arrays pdo foreach


【解决方案1】:

PDO::query“执行一条 SQL 语句,返回一个 结果集 作为 PDOStatement 对象”,而不是一行。

您必须将结果放入变量中,然后从该变量中检索行:

$result = $db->query( $sql );
while( $row = $result->fetchObject() )
{
    (...)
}

作为替代方案,您可以设置默认提取模式,然后使用以下命令检索单行:

$result = $db->query( $sql );
$result->setFetchMode( PDO::FETCH_OBJ );
while( $row = $result->fetch() )
{
    (...)
}

编辑:

实际上,直接foreach 也可以,但是没有特定的获取模式,它会返回枚举和关联的结果:

foreach( $db->query( $sql ) as $row  )
{
    $id = $row['MASTER_ID'];
    // $id = $row[0]; // ← Alternative
}

要使用直接foreach 的对象,您必须使用以下语法:

foreach( $db->query( $sql, PDO::FETCH_OBJ ) as $row  )
{
    $id = $row->MASTER_ID;
}

【讨论】:

【解决方案2】:

我会说你对 $monthwild 的定义是错误的。 您要编写的正确符号是: $monthwild = $month."%"; 在您的脚本中是 $monthwild 字符串 "$month%" 的内容 现在是 $monthwild 字符串 %

的内容

希望你能理解。 不容易描述。

【讨论】:

  • 非常感谢!我想我可以跟随 - 这是有道理的,而且看起来更“正确”。但实际上$monthwild = "$month%"; 也确实按预期工作,不要问我为什么 - 我只是尝试编写对像我这样的菜鸟来说最明显的东西:)
猜你喜欢
  • 2017-07-12
  • 1970-01-01
  • 2014-09-21
  • 2021-08-11
  • 1970-01-01
  • 2017-11-06
  • 2019-04-17
  • 2015-01-21
  • 2016-04-09
相关资源
最近更新 更多