如何使用mysql_fetch_array?

时间:2014-02-24 02:29:40

标签: php mysql xml rss

这是我的代码的副本:

<?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种饲料项目展示了相同的城市和相同的服务。

这可能是一件简单的事情,但我觉得我正盯着一堵砖墙,因为我整天都在努力,但却无法弄明白。我相信可能需要使用mysql_fetch_array,但我似乎无法正确使用它。我真的很感激可以提供任何帮助。

2 个答案:

答案 0 :(得分: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; ?>

答案 1 :(得分:1)

mysql_fetch_row()从结果集中获取一行作为数字键数组,mysql_fetch_assoc()将执行相同操作,但使用选定的字段名称作为键,mysql_fetch_array()将同时执行一次(默认情况下)或者可以选择接收参数,以指定是否需要数字或关联格式。

它与解决方案无关。

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

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

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