我使用一个while来输出数据库查询结果
getInfo是一个类似小偷程序的function
传入code字段的值,偷取另一网站相对应的内容
然后通过一个数组返回结果
while ($row = mysql_fetch_array($query)) {
      echo $row[name] . "<br>";
      echo $row[sex] . "<br>";
      //以此类推
      print_r(getInfo($row[code]));
}
不知道为什么 假如有10个用户 只有第一个能得到返回的数组
其他的9个,无法返回偷取的值
看结果,getInfo函数的确已被执行,因为函数可以输出URL,但是缺少变量function getInfo($value) {
      $url="http://www.xxx.com/index.php?code=$value";
}如果输出$url 那index.php?code=后面为空,但网址可以被输出请赐教原因,谢谢大家

解决方案 »

  1.   


    数据库应该没有什么问题
    如果我在函数前面加上echo $row[code];
    程序可以正常输出值的
    谢谢
      

  2.   

    print_r();是针对数组的。你的getInfo返回的是string。
      

  3.   


    是的,我上面只是写了部分function的代码
    返回数组的没有写
      

  4.   

    请问使用fopen()和file_get_contents()都需要注意什么呢?
    假如循环10次,这个function的确被执行了10次
    但是只是第一次获得了结果,其他九次返回了值,但是没有结果
    如果循环11次,还是只有第一个才能返回结果
    这个很奇怪,谢谢
      

  5.   


    你的意思是:
    你在A处输出正确,而在B处输出不对,
    那很显然从你贴出的代码看是不可能的,那么你肯定有其它未贴出的代码,
    如果你不贴出全部代码,大家怎么可能回答出你的问题?
    while ($row = mysql_fetch_array($query)) {
          echo $row[name] . "<br>";
          echo $row[sex] . "<br>";
          //以此类推
    echo $row[code];    /// A
          print_r(getInfo($row[code]));
    }
    function getInfo($value) {
          $url="http://www.xxx.com/index.php?code=$value";
    echo $url;  ///B
    }
      

  6.   


    function getInfo($value) {
    $url = “http://www.baidu.com/s?wd=”;
    $url = $url . $value;
    $fp = @fopen($url, "r") or die("Timeout");
    $fcontents = file_get_contents($url);

    eregi("<h1>(.*)<span>((.*))</span></h1>", $fcontents, $regs);
    $result[0] = trim($regs[1]);

    eregi("<h1>(.*)<span>((.*))</span></h1>", $fcontents, $regs);
    $regs[2] = str_replace("(","",$regs[2]);
    $regs[2] = str_replace(")","",$regs[2]);
    $result[1] = trim($regs[2]);

    $expre = "<tr><th scope=\"row\" width=\"48%\">Last Trade:</th><td class=\"yfnc_tabledata1\"><big><b><span id=\"yfs_l10_(.*)\">(.*)</span></b></big></td></tr>";
    eregi($expre, $fcontents, $regs);
    $result[2] = trim($regs[2]);

    $expre = "<tr><th scope=\"row\" width=\"48%\">Change:</th><td class=\"yfnc_tabledata1\"><span id=\"yfs_c10_(.*)\" class=\"yfi_quote_price\"><img width=\"10\" height=\"14\" border=\"0\" src=\"(.*)\" alt=\"(.*)\"> <b class=\"              (.*)            \">(.*)</b></span> <span id=\"yfs_p20_(.*)\" class=\"yfi_quote_price\"><b class=\"              (.*)            \"> (.*)</b></span></td></tr>";
    eregi($expre, $fcontents, $regs);
    $regs[8] = str_replace("(","",$regs[8]);
    $regs[8] = str_replace(")","",$regs[8]);
    $result[3] = trim($regs[3]);
    $result[4] = trim($regs[5]);
    $result[5] = trim($regs[8]);

    $expre = "<tr><th scope=\"row\" width=\"48%\">Volume:</th><td class=\"yfnc_tabledata1\"><span id=\"yfs_v00_(.*)\">(.*)</span></td></tr><tr><th scope=\"row\" width=\"48%\">Avg Vol <span class=\"small\">";
    eregi($expre, $fcontents, $regs);
    $result[6] = trim($regs[2]); $result[7] =  $url; // A重点

    fclose($fp);

    return $result;
    } //function ends $query = mysql_query($sql);
    while ($row = mysql_fetch_array($query)) {
    echo $row[name];
    echo $row[sex]; //全部输出正常,Sql语句执行无误,获取了数据库里的内容
    echo $s = $row[code]; //输出正常,保证getInfo得到的值不为空
    $result = getInfo($s); //传入值并执行函数
    print_r($result); // B重点:打印数组的返回值
    }
    最重要的一点!无论通过SQL获取的结果有多少条,只有第一条能通过getInfo函数返回想要的数组,也就是说,只有首条记录能在B重点出输出想要的值,后面的记录全部无法得到值。
    通过在A处赋值,第一条记录输出结果为
    http://www.baidu.com/s?wd=91919191
    后面记录的输出
    http://www.baidu.com/s?wd=
    也就是说,所有的记录都执行了function getInfo
    但是只有第一条成功传入了值
    从这一点来看,并不是function的问题 因为第一条记录获取了结果
    如果在SQL中加入order by 使其倒序输出
    原本在一位可以得到输出数组的记录排到了最后一位,这时它也无法输出值
    谢谢各位老师指教