PHP循环不返回所有可能的MySQL查询结果

时间:2014-03-18 22:33:47

标签: php mysql database

我是php&的新手MySQL的。 我有一个包含两个名为person(属性所有者)和属性的表的数据库。 表之间存在一对多的关系。例如,一个人可以拥有许多财产。

我正在使用php从数据库中检索数据(我已经与数据库建立了连接)。

我想要实现的目标是:如果对某个人的名字进行查询 - (无论是fname还是lname) - 那么此人所拥有的所有属性的列表将显示在我的搜索结果中形成。输出将显示为lname,fname,属性编号,属性路,属性zipcode。

但是,使用此代码,我每个属性所有者名称只获得两个结果输出。 :

$request = mysql_query("SELECT person.fname, person.lname, property.number, property.road, property.zipcode, 
    FROM person p
        INNER JOIN property py 
            ON p.id = py.p_id
    WHERE p.fname LIKE  '%$search%' 
            OR p.lname LIKE  '%$search%' 
            ORDER BY p.lname");

$number = mysql_num_rows($request);
    if ($number == 0){
        $result .= 'No results'.'  '.$search;
    } else { 

    $propertyinfo= array();
    $count = 0;

    $real = false;
    $real_within_array = 0;


    while ($nrow = mysql_fetch_array($query)){
        $lname = $nrow['lname'];
        $real = false;
        for ($l = 0; $l < count($propertyinfo); $l++)
        {
            if ($propertyinfo[$l][0] == $lname)
            {
                $real = true;
                $real_within_array = $l;
                break;
            }
        }

        if ($real)
        {
            $fname = $nrow['fname'];
            $lname = $nrow['lname'];
            $number = $nrow['number'];
            $road = $nrow['road'];
            $zipcode = $nrow['zipcode'];



            $propertyinfo[$real_within_array][1][1] = $fname;
            $propertyinfo[$real_within_array][2][1] = $lname;
            $propertyinfo[$real_within_array][3][1] = $number;
            $propertyinfo[$real_within_array][4][1] = $road;
            $propertyinfo[$real_within_array][5][1] = $zipcode;

        }
        else
        {
            // Get all the data from the row.
            $fname = $nrow['fname'];
            $lname = $nrow['lname'];
            $number = $nrow['number'];
            $road = $nrow['road'];
            $zipcode = $nrow['zipcode'];

            $propertyinfo[$real_within_array][1] = $fname;
            $propertyinfo[$real_within_array][2]= $lname;
            $propertyinfo[$real_within_array][3][0] = $number;
            $propertyinfo[$real_within_array][4][0] = $road;
            $propertyinfo[$real_within_array][5][0] = $zipcode;
            $count++;
        }
    }

示例:Adam Smith拥有4个属性,但我只会得到两个属性的结果,而不是列表中的所有4个属性。

请帮忙。我已经尽力解决这个问题,但我似乎偶然发现了一个棘手的问题。

非常感谢您的帮助。 先感谢您。

3 个答案:

答案 0 :(得分:0)

什么是$uqery?也许:

while ($nrow = mysql_fetch_array($request)){

您会看到:

error_reporting(E_ALL);
ini_set('display_errors', '1');

至于所有其他的东西,如果不知道$propertyinfo的样子,就不可能分辨出来。看起来很复杂所以我不跟随。

答案 1 :(得分:0)

我认为这是一个逻辑错误; 当你定义$ propertyinfo = array();它的大小为0,因此带有块的代码 for($ l = 0; $ l&lt; count($ propertyinfo); $ l)只有在将一些值分配给$ propertyinfo后才会开始运行。

答案 2 :(得分:-1)

尝试使用while(($nrow=mysql_fetch_assoc($query))!=null)循环查询结果