【问题标题】:How to use mysql_fetch_array?如何使用 mysql_fetch_array?
【发布时间】:2014-02-24 02:29:39
【问题描述】:

这是我的代码的副本:

<?php header("Content-type: text/xml"); ?>
<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; ?>

<?php
mysql_connect("localhost", "database_user", "database_pass") or die(mysql_error()); 
mysql_select_db("database_name") or die(mysql_error()); 

$cityquery = "SELECT * FROM cities ORDER BY RAND() LIMIT 1";
$cityresult = mysql_query($cityquery);
$cityrow = mysql_fetch_row($cityresult);
$city = $cityrow[0];

$servicequery = "SELECT * FROM services ORDER BY RAND() LIMIT 1";
$serviceresult = mysql_query($servicequery);
$servicerow = mysql_fetch_row($serviceresult);
$service = $servicerow[0];
?>

<rss version="2.0">
<channel>
  <title>Website Name</title>
  <link>http://www.mywebsite.com</link>
  <description>This is the main description.</description>
  <pubDate><?echo date('Y/m/d H:i:s');?></pubDate>

<?php foreach( range( 1, 25 ) as $i ): ?>

<item>
    <title><?php echo $service; ?> in <?php echo $city; ?></title>
    <pubDate><?echo date('Y/m/d H:i:s');?></pubDate>
    <link>http://www.mywebsite.com</link>
    <description>This is where the description goes.</description>
</item>

<?php endforeach; ?>

</channel>
</rss>

我正在尝试生成一个包含 25 个项目的 RSS 提要。现在所有 25 个项目都显示完全相同的内容。

您可以在此处查看导致问题的每个项目的标题代码:

<title><?php echo $service; ?> in <?php echo $city; ?></title>

这样做是从我的 MySQL 数据库中提取随机服务和随机城市的列表。每个项目的标题应显示随机城市和随机标题。但截至目前,它们都为所有 25 个 rss 提要项目显示相同的城市和相同的服务。

这可能是一件简单的事情,但我觉得我在盯着一堵砖墙,因为我整天都在做这件事,却无法弄清楚。我相信 mysql_fetch_array 可能需要使用,但我似乎无法正确使用。如果能提供任何帮助,我将不胜感激。

【问题讨论】:

  • "如何使用 mysql_fetch_array?" - 不要,它已被弃用

标签: php mysql xml rss


【解决方案1】:

在您的代码中,您只获取下一行一次,因此它将始终包含相同的数据。

除了 @Phil 在评论中提到它已被弃用之外,您应该在循环中每次获取一个新行。

编辑:下面的代码应该符合您的预期

<?php
mysql_connect("localhost", "database_user", "database_pass") or die(mysql_error()); 
mysql_select_db("database_name") or die(mysql_error()); 

$cityquery = "SELECT * FROM cities ORDER BY RAND()";
$cityresult = mysql_query($cityquery);

$servicequery = "SELECT * FROM services ORDER BY RAND()";
$serviceresult = mysql_query($servicequery);
?>

<rss version="2.0">
<channel>
  <title>Website Name</title>
  <link>http://www.mywebsite.com</link>
  <description>This is the main description.</description>
  <pubDate><?echo date('Y/m/d H:i:s');?></pubDate>

<?php foreach( range( 1, 25 ) as $i ):
    $cityrow = mysql_fetch_row($cityresult);
    $city = $cityrow[0];
    $servicerow = mysql_fetch_row($serviceresult);
    $service = $servicerow[0];
?>

<item>
    <title><?php echo $service; ?> in <?php echo $city; ?></title>
    <pubDate><?echo date('Y/m/d H:i:s');?></pubDate>
    <link>http://www.mywebsite.com</link>
    <description>This is where the description goes.</description>
</item>

<?php endforeach; ?>

【讨论】:

    【解决方案2】:

    mysql_fetch_row() 从结果集中获取一行作为数字键数组,mysql_fetch_assoc() 将执行相同的操作,但使用选定的字段名称作为键,mysql_fetch_array() 将同时执行这两项操作(默认情况下)或可选地,可以接收一个参数来指定你想要它是数字格式还是关联格式。

    这与解决方案无关。

    您在这里缺少的是,您必须为从数据库中选择的每条记录调用mysql_fetch_row()。这个函数应该被循环调用,直到它返回FALSE

    相反,您只调用了一次,并打印了 25 次相同的结果。

    此外,您仍然只从数据库中选择了一条记录 (SELECT ... LIMIT 1),您如何期望得到 25 种不同的结果?

    【讨论】:

    • LIMIT 1 很好,我写答案时没有看到。
    猜你喜欢
    • 2011-11-10
    • 2011-08-07
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2011-03-27
    • 2012-08-19
    相关资源
    最近更新 更多