2012-05-10 2 views
0

私はテーブルに合計42のレコードを持っています。問題は、私の列のうち、Leaveの型を示すもので、$ empTypeを呼び出すことです。そのテーブルの私のコラムでは、$ empTypeの24番目のレコードは "Medical Leave"と呼ばれていますが、whileループのため$ empTypeは42番目のレコードしか表示しないため、if文全体が機能しません。PHPは別の方法でテーブルのデータを取得していますか?

odbc_fetch_rowもうまくいくことはわかっているので、24回目のレコードしか表示したくないのですが、すべての方法でループして各行のすべてのデータを取得したいのです。

$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を使用しています。

+0

コード*ループは基本的には何も、およびコードあなたもしません*内各行で実行したい*外側*ループです。何を言いたいのですか? – Jon

+0

私はwhileループの後に終了するようにwhileループを入れようとしました。しかし、それは動作しません – user127886

答えて

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は改善されています。

EDIT:あなたは(など、ルーピングのために)後で、すべての行を使用する場合、これは良い選択肢である:

<?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. 
    } 
} 
+0

私はこれを叫び声で試してみます、ありがとう! – user127886

+0

@ user127886問題ありません。しかし、コードには小さな問題があります。あなたのクエリには、 "" Where Status = 'Pending' "が含まれています。後で、$ status == 'Approved'をチェックしています。これらの結果はクエリからフィルタリングされるため、決して承認されていない可能性があります。 –

0

だけでなく、ジョンは、指摘ニーズは、しばらくの内側になるようにすれば、だけでなく、もしあなたがデータの各行をループしていることが

+0

私はコードに$ステータスを入れるのを忘れてしまった。私は何かを把握しなければならないと思う、私は現在、何かをするためにあまりにも眩暈だ、とにかくあなたにサー:)。 – user127886

+0

本当にあなたが投稿したバージョンではないことを意味しますか?それ以外は、ちょうど終わりまでの閉じ括​​弧を動かす必要があります –

0

ある関係なく実行することはないので、あなたは$の状態を定義することはありませんそのwhileではまだ、あなたがwhileifを持っている必要があります...

whileループの外でしばらくの各ループで再宣言されているVARのための条件を保持しているif文を持っている:

$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; 
関連する問題