php / MySQL Query Loop仅使用第一个值

时间:2012-04-24 17:08:55

标签: php mysql function loops

我正在写一个网上商店,我遇到了一个功能问题,我希望有人可以帮助我。该功能旨在确定产品是否以其他格式存在,并链接到侧边栏中的产品。例如,DVD,Blu-Ray和Digital Download中可能存在产品。

这是我的功能代码:

function formatExists($format, $pid) {

  global $conn; global $dbname; global $loginid;
  mysql_select_db($dbname, $conn);

  // Get author and description of the requested product
  $query = "SELECT description, author FROM products WHERE productid = $pid";
  $result = mysql_query($query);
  while($row = mysql_fetch_array($result)) {
    $author = $row['author'];
    $description = $row['description'];
  }

  // Find other products with the same description & author in requested format
  $query = "SELECT productid FROM products WHERE format = $format AND description = '$description' AND author = '$author'";
  $result = mysql_query($query);
  while($row = mysql_fetch_array($result)) {
    $rpid = $row['productid'];
  }

  if($rpid) {
    return $rpid;
  } else {
    return 0;
  }
}

我在代码的另一部分写了一个循环,它从数据库中获取所有格式,然后在它们上运行上面的函数,试图找出产品可用的格式:

    $query = "SELECT formatid, description, postage FROM formats";
    $result = mysql_query($query);
    while($row = mysql_fetch_array($result)) {
      $id = $row['formatid'];
      $desc = $row['description'];
      $post = $row['postage'];
      ... STUFF ...
    }

当'... STUFF ...'是'$ bodycontent。= $ id';“它回显了数据库中的每个格式ID,这是我期望的行为。但是,当我将其更改为:

$pid = formatExists($id, $productid);
if($pid) {
  $query = "SELECT price FROM products WHERE productid = $pid";
  $result = mysql_query($query);
  $pricedata = mysql_fetch_array($result, MYSQL_ASSOC);
  $pprice = $pricedata['price'];
  $bodycontent .= "<span>";
  if($pid != $productid) {
    $bodycontent .= "<a href='$siteroot/index.php?page=product&id=$pid'>";
  }
  $bodycontent .= "$desc - &dollar;$pprice";
  if($postage) {
    $bodycontent .= " + P&amp;P";
  }
  if($pid != $productid) {
    $bodycontent .= "</a>";
  }
  $bodycontent .= "</span>";
}

它以所需的方式停止运行,并开始返回第一个格式ID的响应。

如果我手动将'formatExists($ id,$ productid)'更改为'formatExists(2,$ productid)'然后价格和链接更新,那么该功能正常运行。但是,出于某种原因,它并没有为每个类别运行一次,它只是在我的循环中运行一次。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:-1)

你使用的功能是错误的!我的意思是 - &gt; mysql_fetch_array

您应该使用mysql_fetch_array

更改mysql_fetch_assoc

看到真实的结果。