php PDO fetchAll与foreach无法正常工作

时间:2017-01-31 00:00:16

标签: php mysql xml pdo foreach

我在从数据库中选择PDO时遇到一些问题,以便根据文章(实际上是页面)生成动态站点地图文件。 PHP没有丢失任何错误,因为我没有在错误日志中看到任何错误。这是代码。

SELECT STATEMENT SNIPPET

$q = $db->prepare("SELECT * FROM articles ORDER BY aid ASC");
$r = $q->fetchAll(PDO::FETCH_ASSOC);

FOR EACH SNIPPET + XML

foreach($r as $row) {

$format_date = date('Y-m-d', $row['date']);
$format_slug = strtolower($row['slug']);

echo '
<url>
    <loc>'.$format_slug.'</loc>
    <lastmod>'.$format_date.'</lastmod>
    <changefreq>monthly</changefreq>
</url>
';

}

以前的XML数据&#34; FOREACH&#34;

echo '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
      <loc></loc>
      <lastmod>2017-01-27</lastmod>
      <changefreq>weekly</changefreq>
      <priority>1.0</priority>
</url>
<url>
      <loc>contact-us</loc>
      <lastmod>2017-01-27</lastmod>
      <changefreq>yearly</changefreq>
</url>
';

以后的XML数据&#34; FOREACH&#34;

echo '</urlset>';

我在页面的最顶部使用适当的PHP标头来输出

header('Content-Type: text/xml');

因此,我导航到Sitemap网址,返回echo语句中的预定义数据,在这种情况下, BEFORE&#34; FOREACH&#34; 部分中的2个数据片段和当然会返回 AFTER&#34; FOREACH&#34;

然而,由于一些奇怪的原因,没有数据从数据库中获取,即使是真相,脚本似乎也能正常工作。我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

您需要执行该声明。

$q = $db->prepare("SELECT * FROM articles ORDER BY aid ASC");
$q->execute();
$r = $q->fetchAll(PDO::FETCH_ASSOC);

或者,您可以使用PDO :: query http://php.net/manual/en/pdo.query.php

答案 1 :(得分:0)

您是否忘记在Execute上致电statement