ADODB kullanarak Alan Adlarını alın

3 Cevap php

Ben ADODB yararlanarak ve ben bir sonuç kümesinin alan adlarını almak istiyoruz. Bunu nasıl yaparsınız?

$result = &$db->Execute($query);

Yukarıdaki sorgu Ben sadece bu kadar olduğu bir satırda ve döngü gelen alan adlarını almak için nasıl bilmiyorum, başarıyla yürüttü.

Ben bir erişim veritabanı kullanımı yapıyorum,

Ben arandı zaman docs şey bulamadı. Muhtemelen doğru terimleri kullanarak değil.

Tüm teşekkürler

3 Cevap

Bu alma moduna bağlıdır - her satır sütun düz bir dizi içerir ADODB_FETCH_NUM (muhtemelen varsayılan) setFetchMode eğer. Eğer ADODB_FETCH_ASSOC için setFetchMode, size bir anahtar tarafından her değere erişebilirsiniz bir ilişkisel dizi olsun. Aşağıdaki belgeler ADODB alınır - http://phplens.com/lens/adodb/docs-adodb.htm#ex1

$db->SetFetchMode(ADODB_FETCH_NUM);
$rs1 = $db->Execute('select * from table');
$db->SetFetchMode(ADODB_FETCH_ASSOC);
$rs2 = $db->Execute('select * from table');

print_r($rs1->fields); # shows array([0]=>'v0',[1] =>'v1')
print_r($rs2->fields); # shows array(['col1']=>'v0',['col2'] =>'v1')

Sonuçların bir dizi döngü:

$result = &$db->Execute($query);
foreach ($result as $row) {
    print_r($row);
}

@ Thetaiko tarafından yayınlanmıştır solüsyonuna küçük iyileştirme.

SADECE alan adlarını ihtiyacı varsa, LIMIT 1 (aşağıda gösterildiği gibi) select ifadesinin sonuna eklenecek. Bu oldukça size tüm tabloyu göndermek yerine, sütun adları ile size tek bir satır göndermek için sunucu söyleyecektir.

SELECT * FROM table LIMIT 1;

Ben 9.1M kayıtları içeren bir tablo ile çalışıyorum, bu yüzden bu küçük değişikliğin sorguyu hızlandırır!

Ben örneğin, MySQL dışındaki veritabanları ile çalışma olanağı sağlar, bazı ekstra şeyler çıkarılır ettik - Bu benim bir alan dizi dönmek için kullanabileceğiniz bir fonksiyondur.

function getFieldNames($strTable, $cn) {

    $aRet = array();

    # Get Field Names:
    $lngCountFields = 0;

    $strSQL = "SELECT * FROM $strTable LIMIT 1;";

    $rs = $cn->Execute($strSQL)
            or die("Error in query: \n$strSQL\n"  . $cn->ErrorMsg());
    if (!$rs->EOF) {
        for ($i = 0; $i < $rs->FieldCount(); $i++) {
            $fld = $rs->FetchField($i);
            $aRet[$lngCountFields] = $fld->name;
            $lngCountFields++;
        }
    }

    $rs->Close();
    $rs = null;

    return $aRet;

}

Düzenleme: Sadece dediğim gibi, ben bazı ekstra şeyler çıkarılır ettik ve EOF kontrolü üzerinde, azaltılmış versiyonu artık nedenle gerekli olduğunu, işaret etmek.