【问题标题】:mysql to php to xml shows blank agemysql to php to xml 显示空白年龄
【发布时间】:2013-05-05 12:51:12
【问题描述】:

我在输出请求的歌曲名称、艺术家、专辑列表以及请求者的姓名和他的 XML 消息时遇到问题。

我试过了,但它给了我一个空白页:

$link = mysql_connect("localhost","dbuser","dbpass");
mysql_select_db("dbname");
$query = "SELECT requestlist.host, requestlist.msg, requestlist.name, songlist.ID, songlist.count_requested, songlist.artist, songlist.title,
    songlist.album, songlist.buycd, songlist.date_played,                          count(*) as cnt                         FROM requestlist, songlist
    WHERE   (requestlist.songID = songlist.ID) AND  (requestlist.code<700)    GROUP BY requestlist.msg, songlist.ID, songlist.count_requested,
    songlist.artist, songlist.title, songlist.album, songlist.buycd, songlist.date_played    ORDER BY requestlist.msg DESC, songlist.date_played DESC" ;
$results = mysql_query($query);
echo "<request>\n";

while($line = mysql_fetch_assoc($results)) {
    echo "         <CD>\n";
    echo "<singer>" . $line["artist"] . "</singer>\n";
    echo "<song>" . $line["title"] . "</song>\n";
    echo "<album>". $line["album"] ."</album>\n";
    echo "<name>". $line["name"] ."</name>\n";
    echo  "<shout>" . $line["msg"] . "</shout>\n";
    echo "</CD>\n";   
}
echo "</request>\n";
mysql_close($link);

【问题讨论】:

  • 为什么要连接mysql 3次?
  • 空白页通常表示发生了 PHP 错误,并且您已关闭错误报告。修复:在配置文件中打开错误报告,执行脚本,然后读取错误输出。
  • 我刚刚编辑了我的代码,抱歉在我从服务器复制代码时出错了
  • 强制: mysql_* 函数将是 deprecated in PHP 5.5。不建议编写新代码,因为它会在未来被删除。相反,MySQLiPDObe a better PHP Developer

标签: php mysql xml


【解决方案1】:

我宁愿使用simplexmlxmlwriterDOM来构建XML,而PDO用于数据库处理:

$stmt = $db->prepare($query); // define $db as PDO in include-file
$stmt->execute();
$requests = $stmt->fetchAll(PDO::FETCH_ASSOC);

$xml = new SimpleXMLElement("<?xml version="1.0" encoding="UTF-8"?><request></request>");

foreach ($requests as $r) {
    $cd = $xml->addChild("CD");
    $cd->addchild("singer", $r['artist']);
    $cd->addChild("song", $r['title']);
    $cd->addChild("album", $r['album']);
    $cd->addChild("name", $r['name']);
    $cd->addChild("shout", $r['msg']);
}

echo $xml->asXML();

还有一个带有映射数组的小变体:

$fields = array(
    'singer' => 'artist',
    'song'   => 'title',
    # ...
);

foreach ($requests as $r) {
    $cd = $xml->addChild("CD");
    foreach ($fields as $name => $column)
    {
        $cd->$name = $r[$column];
    }
}

【讨论】:

  • 如果您在结果集中使用输出中的预期名称对字段进行别名,使用FETCH_ASSOC 会更容易。然后别名可以移动到我认为有意义的 SQL 查询中。
  • @michi : +1 使用 PDO 和整洁的 XML。
  • 另外,我以某种方式收回了我对查询中别名的评论看到这个 SQL 字符串的怪物 ;) 很好的答案,我添加了一个别名表的一些变化以数组的形式。
  • @hakre "SQL 字符串的怪物" LOL
  • 感谢大家的帮助,特别是 Michi 和 Hakre 我发现我发布的代码也可以工作,但是我的 MYSQL 上的 requestlist.songID 和 songlist.ID 行有问题我不是开发人员但是尝试尽可能多地学习,因为我喜欢 devoloping 我看到我在 php 方面远远落后我以前从未使用过 pdo 但它看起来很棒我会阅读更多的教程,所以我可以更多地了解它,并会在未来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 2022-10-20
  • 2019-03-28
  • 1970-01-01
  • 2011-10-14
  • 2011-01-15
  • 2013-02-17
相关资源
最近更新 更多