使用PHP从Oracle数据库中显示多行

3
我正在尝试使用php从Oracle表中显示多行数据。 以下是我的代码:
<?php
include("dbconnect.php"); 
$personcon=$conn;

$surname = $_POST['Surname'];   
$suburb = $_POST['Suburb'];
$state = $_POST['State'];
$discipline = $_POST['Discipline'];
$companyname = $_POST['CompanyName'];
$rank = $_POST['Rank'];
$role = $_POST['Role'];
$yearsexperience = $_POST['YearsExperience'];
$recentproject = $_POST['RecentProject'];
$sellrate = $_POST['SellRate'];
$projectnumber = $_POST['ProjectNumber'];
$tendernumber = $_POST['TenderNumber'];

$query = "SELECT CP.ROLE AS CURRENT_ROLE , CP.SURNAME, CP.FIRSTNAME, CP.COMPANY,CC.COMPANYNAME AS CONSULTANT_COMPANY, CP.YEARSEXPERIENCE AS EXPERIENCE_IN_YEAR, CP.QUALIFICATION, D.PRINCIPLEDISCIPLINE, D.SUBDISCIPLINE1, D.SUBDISCIPLINE2, D.SUBDISCIPLINE3, D.SUBDISCIPLINE4, D.SUBDISCIPLINE5, D.SUBDISCIPLINE6,  D.SUBDISCIPLINE7,  D.SUBDISCIPLINE8,  L.SUBURB, L.STATE, L.COUNTRY FROM CONSULTANTPERSONNEL CP, LOCATION L, ONSULTANTPERSONNEL_DISCIPLINE N, DISCIPLINE D, CONSULTANTCOMPANY CC, CONTRACTS C, PROJECTS P, TENDERS T, FEEBASIS F WHERE CP.LOCATIONID = L.LOCATIONID AND CP.CONSULTANTPERSONALID = N.CONSULTANTPERSONALID AND N.DISCIPLINID = D.DISCIPLINID AND CP.CONSULTANTCOMPANYID = CC.CONSULTANTCOMPANYID AND CP.CONTRACTID = C.CONTRACTID AND C.FEECODE = F.FEECODES AND C.PROJECTNUMBER = P.PROJECTNUMBER AND C.TENDERNUMBER = T.TENDERNUMBER AND LOWER(CP.SURNAME) LIKE LOWER('%".$surname."%') AND LOWER(L.SUBURB) LIKE LOWER('%".$suburb."%') AND LOWER(L.STATE) LIKE LOWER('%".$state."%') AND LOWER(D.PRINCIPLEDISCIPLINE) LIKE LOWER('%".$discipline."%') AND LOWER(CC.COMPANYNAME) LIKE LOWER('%".$companyname."%') AND LOWER(CP.RANK) LIKE LOWER('%".$rank."%') AND LOWER(CP.ROLE) LIKE LOWER('%".$role."%') AND LOWER(P.PROJECTNAME) LIKE LOWER('%".$recentproject."%') AND LOWER(P.PROJECTNUMBER) LIKE LOWER('%".$projectnumber."%') AND LOWER(T.TENDERNUMBER) LIKE LOWER('%".$tendernumber."%')";

$SQL = oci_parse($personcon, $query);
oci_execute($SQL);
$results = array();
$numRows = oci_fetch_all($SQL, $results, null, null, OCI_FETCHSTATEMENT_BY_ROW);

        if($numRows > 0){       
        echo "<p> <table border=1>\n";
            //Print the headings
            echo "<tr>\n";
                foreach($results[0] as $index=>$value)
                    echo "<th>$index</th>\n";
            echo "</tr>\n";

            echo "<tr>\n";
            foreach($results as $row)
                foreach($row as $index=>$value)
                    echo "<td>$value</td>\n";
            echo "</tr>\n";
        echo "</table>\n </p>";

        oci_close($personcon);
        } else {
            echo "<tr> The search you enter is not in the database.";
        }
?>  

我可以检索我想要的数据,但是它不是逐行显示,而是在一行中显示所有数据。

有什么办法可以解决这个问题吗?谢谢。

1个回答

0

在您的循环中,您犯了一个简单而常见(至少对我来说)的错误,它只创建一行并将每个列放在其中。尝试更改:

       echo "<tr>\n";
        foreach($results as $row)
            foreach($row as $index=>$value)
                echo "<td>$value</td>\n";
        echo "</tr>\n";

变成这样:

       foreach($results as $row)
       {
            echo "<tr>\n";
            foreach($row as $index=>$value)
            {
                echo "<td>$value</td>\n";
            }
            echo "</tr>\n";
       }

括号可以帮助您看到作用域。这不是Python,您知道的。 ;)


谢谢。这就是问题所在,后来发现了。 想太多了,忘记加括号了。 无论如何,感谢您查看我的混乱代码并指出错误。 - John
没问题。如果您解决了问题,可以在这里编写您自己的答案并接受它,或者将我的标记为正确答案 - 这样就不会再有其他人被打扰了... - T.Z.
好的,没问题。下次我会做的。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接