0

テーブルには合計 42 のレコードがあります。問題は、休暇の種類を示す私の列の 1 つが call であること$empTypeです。その表の私の列では、 の 24 番目のレコードは$empType「医療休暇」と呼ばれていますが、while ループのために$empType42 番目のレコードしか表示されないため、if ステートメント全体が機能しません。

24 番目のレコードだけを表示したくありません。odbc_fetch_row同様に機能することがわかっているためですが、ずっとループして、各行からすべてのデータを取得したいと考えています。

$conn=odbc_connect("employee","","") or die (odbc_errormsg());

$sql1="SELECT * FROM employee WHERE Status='Pending'";
$rs1=odbc_exec($conn,$sql1);
while (odbc_fetch_row($rs1))
{
$leaveID=odbc_result($rs1,"Leave ID");
$empID=odbc_result($rs1,"empID");
$empType=odbc_result($rs1,"TypeOfLeave");
}

if ($status == "Approved" && $empType == "Medical Leave")
{
my code
}

echo $empType;

誰でも私がこれを乗り越えるのを手伝ってくれますか? 私は真剣にこれを成し遂げる必要があります。

Microsoft Access データベース ODBC を使用しています。

4

3 に答える 3

1
<?php
$conn = odbc_connect("employee","","") or die (odbc_errormsg());

$sql1 = "SELECT * FROM employee WHERE Status='Pending'";
$rs1 = odbc_exec($conn,$sql1);

while(odbc_fetch_row($rs1)) {
    $leaveID=odbc_result($rs1,"Leave ID");
    $empID=odbc_result($rs1,"empID");
    $empType=odbc_result($rs1,"TypeOfLeave");
    $status = odbc_result($rs1,"Status"); // added this.


    // moved to the while loop.
    if( $empType === 'Medical Leave' && $status === 'Approved' ) {
        // your code.
    }
}

また、PHPのODBC APIは恐ろしく見え、すべてのodbc_fetch_row、odbc_resultが実行されています。おそらく、代わりにPDOを使用することをお勧めしますか?このようにすると、コードは次のようになります。

<?php
$dbh = new Pdo( 'odbc:MSSQLServer', 'username', 'password' );

$results = $dbh->query( 'SELECT * FROM employee', PDO::FETCH_ASSOC );

foreach( $results as $result ) {
    if( $result['TypeOfLeave'] === 'Medical Leave' && $result['Status'] === 'Approved' ) {
        // your code here.
    }
}

ODBCでPDOを使用したことはないので、バグについてはよくわかりませんが、私が知る限りでは、使用しているAPI以外のAPIは改善されています。

編集:後ですべての行を使用する場合(ループなど)、これは良い代替手段です:

<?php
$conn = odbc_connect("employee","","") or die (odbc_errormsg());

$sql1 = "SELECT * FROM employee WHERE Status='Pending'";
$rs1 = odbc_exec($conn,$sql1);

$rows = array( );

while(odbc_fetch_row($rs1)) {
    $rows[] = array(
        'leave ID' => odbc_result( $rs1, 'Leave ID' ),
        'empID' => odbc_result( $rs1, 'empID' ),
        'empType' => odbc_result( $rs1, 'empType' ),
        'status' => odbc_result( $rs1, 'Status' ),
    );
}

// $rows now contains *all* rows, which you can loop over later.

// some more code here.

foreach( $rows as $row ) {
    if( $row['status'] === 'Approved' && 'empType' === 'Medical Leave' ) {
        // your code here.
    }
}
于 2012-05-10T10:01:25.697 に答える
0

データの各行をループしてwhileいますが、ifループの外側にあるwhileの各ループで再宣言されるvarの条件を保持するステートメントがありwhileます...

あなたはif内部を持っている必要がありますwhile

$conn=odbc_connect("employee","","") or die (odbc_errormsg());

$sql1="SELECT * FROM employee WHERE Status='Pending'";
$rs1=odbc_exec($conn,$sql1);
while (odbc_fetch_row($rs1))
{
$leaveID=odbc_result($rs1,"Leave ID");
$empID=odbc_result($rs1,"empID");
$empType=odbc_result($rs1,"TypeOfLeave");

if ($status == "Approved" && $empType == "Medical Leave")
{
my code
}//end of if

}//end of while

echo $empType;
于 2012-05-10T09:54:40.050 に答える
0

Jon が指摘したように、if は while の中にある必要がありますが、$status を定義しないため、if はどこにいても実行されません。

于 2012-05-10T09:47:47.257 に答える