Bir veritabanından alınırken neden MySQL ilk satırı dışarı bırakacaktı?

4 Cevap php

Nedense benim veritabanından veri almak sorun yaşıyorum. Bu listelenen olmanın ilk öğeyi kapalı bırakır.

Bağlantı:

mysql_select_db($database_my_db, $my_db);

    $query_rs_jobboards11 = "SELECT * FROM jobBoardsSpecTypes ORDER BY type";
    $rs_jobboards11 = mysql_query($query_rs_jobboards11, $my_db) or die(mysql_error());
    $row_rs_jobboards11 = mysql_fetch_assoc($rs_jobboards11);
    $totalRows_rs_jobboards11 = mysql_num_rows($rs_jobboards11);

Çıktı:

 <form action="" method="get">
        <select name="specialty">

         <?php do { ?>

    <option value="<?php echo $row_rs_cms11['type']; ?>"><?php echo $row_rs_cms11['type']; ?></option>


    <?php } while ($row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11)); ?> 


        </select>

<input type="submit" value="Go" />

</form>

Bu tip sütunundaki ilk girdiyi tutar. Ben fazla kayıt eklerseniz, daha sonra, önceden dışarı bırakılan biri gösterilen ve yeni giriş gizli olduğunu.

Ben yanlış ne yapıyorum? Veritabanı, bu sayfada ama her şey için mükemmel çalışıyor.

4 Cevap

Zaten $row_rs_jobboards11 için ilk satırı atanmış, böylece $row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11) içinde arama yaparken do / döngü iken, tabloda ikinci satırda başlıyor.

Yerine bir süre herhangi bir fark yok iken / a do kullanılarak, ancak farklı değişken adlarını kullanarak bir fark yok.

Update, to explain the difference between while, do/while, and, making sure your variable names are correct.

Çalışır iken döngü:

while ($row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11)) {
    echo '<tr>';
    //stuff here
    echo '</tr>';
}

döngü, aynı zamanda çalıştığı while / do

$row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11);
do {
    echo '<tr>';
    //stuff here
    echo '</tr>';
} while ($row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11));

Not $ satır değişken maçlar olduğunu. Eğer ilk çağrıyı dışarı bırakırsanız, hala çalışır, ancak herhangi bir içerik outputted önce ekstra bir (boş) alırsınız. Eğer farklı bir isim (ve bir mysql_fetch_ * aramayı kullanın) değişkeni ayarlarsanız, dahili veritabanı gösterici tablosundaki ikinci satıra ayarlanır. Farklı bir (kullanılmayan) değişken ayarladığınız çünkü Sonuç olarak, size, tablodaki ilk satırı özledim.

Moral hikayenin:

Döngü, sadece emin olmak varken / bir süre veya bir do kullanabilirsiniz

  • Bir do / while kullanıyorsanız, satır değişken prior döngüsüne girmeden oluşturulması gerekir. Ve
  • Değişken adları aynı olduğundan emin olun!

Yerine while do-while kullanarak çünkü. İlk yineleme $ row_rs_cms11 tanımsızdır.

Döngü sırasında /, $row_rs_cms11 do ayarlı değil çok ilk yineleme. Bu while kodu sonraki yineleme üzerinde ayarlanmış, ancak bunun üzerinden ilk kez boş olur. Ben sadece bir değişken yanlış adında inanıyorum.

Bu değiştirin:

$row_rs_jobboards11 = mysql_fetch_assoc($rs_jobboards11);

Buna:

$row_rs_cms11 = mysql_fetch_assoc($rs_jobboards11);

Daha da iyisi, bütün o ilk mysql_fetc_assoc() çağrısı yapmıyoruz ve sadece bir while döngü yalnızca için do/while döngü değiştirmek ve ilk satır olacak Orada yerine okuyun.

Eğer gerçekten $ row_rs_jobboards11 geliyordu $ row_rs_cms11 kullanıyorsunuz ($ row_rs_cms11 etrafında ilk defa tanımlanmış değildir).

    <?php do { ?>

<option value="<?php echo $row_rs_jobboards11['type']; ?>"><?php echo $row_rs_jobboards11['type']; ?></option>


<?php } while ($row_rs_jobboards11 = mysql_fetch_assoc($rs_jobboards11)) ?> 


    </select>

While () yerine do {} arasında ise () kullanmış olsaydı hata daha belirgin olurdu.

Eğer () ileri sürülmüştür olarak ise için ise () do {} değiştirirseniz, size ilk kez $ row_rs_jobboards11 almak sizin kod parçası kaldırmak gerekir.