为什么我从MySQL查询中获取重复项?

时间:2011-06-29 21:10:55

标签: php mysql sql ajax

我正在使用对PHP文件的Ajax调用来从MySQL数据库获取数据并在HTML中填充选择选项。问题是选项中的重复项目,我不知道为什么。我在工作台中尝试了查询,它带回了我需要的东西。

PHP文件:

<?php
    $q=$_GET["q"];

   // open db connection code

   $query = "select * from r2rtool.materialtype where type = 'FE' and tools like '%".$q."%'";
   $result = mysql_query($query);

   $option = "";

   while($row = mysql_fetch_array($result))
    {
        $mat = $row["Material"];
        $option.="<option value=\"$mat\">".$mat."</option>";

        echo $option;
    }

   // close db connection
?>

Ajax功能:

function populatematerial(str)
{
    if (str=="") {
      document.getElementById("txtHint").innerHTML="";
      return;
    }

    if (window.XMLHttpRequest) {
      // IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
    }

    else{
      // IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
      if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
      }
    }

    xmlhttp.open("GET","phpfile.php?q="+str,true);
    xmlhttp.send();
}

3 个答案:

答案 0 :(得分:6)

while($row = mysql_fetch_assoc($result))
{
     $option .= "<option value=\"{$row[Material]}\">{$row[Material]}</option>";
}
echo $option;

答案 1 :(得分:1)

您需要做的就是将echo $option;移出while循环,如下所示:

while($row = mysql_fetch_array($result))
{
    $mat = $row["Material"];
    $option.="<option value=\"$mat\">".$mat."</option>";
}
echo $option;

您应该在构建HTML之后输出HTML,而不是在构建它时输出。

答案 2 :(得分:0)

使用mysql_fetch_assoc代替mysql_fetch_array,因为数组会以数字形式返回值并命名两种格式,因此它会两次生成数据,

其中mysql_fetch_assoc只返回数组作为数组的名称元素。

了解更多信息 试试

<?php 
$query = mysql_query("some query ");
$row = mysql_fetch_array($row);
$assoc = mysql_fetch_array($row);
print_r ($row);
echo "<br>";
print_r ($assoc);
echo "<br>";
?>