2016-04-13 15 views
1

CI modelinde, tabloyu alanlarını almak için ilk sorguların (bu alanlar zaman içinde dinamik olarak değişeceğinden, bu nedenle alan adlarının bir listesini kodlayamıyorum) bir işlev yaptım), ve sonra ilk sorgu sonuçları alır ve bir alan adı listesi oluşturduğunda, bir satır veya kayıt ait değerleri almak için tabloyu yeniden sorgular. Daha sonra ikinci sorgu sonucu bir dizide saklar. controller.Here geri geçirir adımları gerçekleştirir tam fonksiyonudur: ilk baştaCodeIgniter 3 MySQL sorgusu rasgele bir şekilde çalışır

public function getAssetFeatures($as_id) 
{ 
    $data = array(); 
    //this sql query gets the field names from the table I want to query. 
    $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '".DATABASE."' AND TABLE_NAME = 'as_features';"; 
    $query = $this->db->query($sql); 
    $count = 0; 
    foreach($query->result_array() as $k) 
    { 
     foreach($k as $kk=>$v) 
     { 
      if( $v != "as_features_id" && 
        $v != "as_id" && 
        $v != "cid" && 
        $v != "lot_size") 
      { 
       $features_array[$count] = $v; 
       $count++; 
      } 
     } 
    } 
    $features_string = implode(",",$features_array); 
    //I got the field names, put them into an array, then concatenated them into a string, which I will use for the fields in the next query: 
    $sql = "SELECT $features_string FROM as_features WHERE as_id='$as_id'"; 
    $query = $this->db->query($sql); 
    //mandatory rooms/features: 
    foreach($query->result() as $row) 
    { 
     foreach($row as $k=>$v) 
     { 
      $data["$k"] = $v; //build an associative array with the values of each field for the one row I am querying 
     } 
    }     
    return $data; // return the associative array. 
} 

bir şey benim tablo veya görünümde kırıldı sanmıştım ama yenileyerek modele karşı aynı çağrıyı yapmaya devam ettiler olarak sayfa ve girme Tam olarak aynı değerler, bazen kod çalıştı ve ben "undefined endeksi" hatalarını alamadım fark ettim. kullanarak aynı işlemi için, her zaman

echo "<pre>"; 
print_r($asset['features']); 
echo "</pre>"; 

... ve sadece bazen başarılı performans beklenen çıkışı, fakat:

Yani bu kod ile dizinin sonuçlarını outputted aynı parametreler, şöyle görünür: sorgu bir sonuç kümesi ve daha sonra nüfuslu dizi benim form çalışmalarını döner ve, normal.but sorgu başarısız çoğu zaman bakar ve ne görünüyor olsun

Array 
(
    [kitchen] => 1 
    [liv_area] => 0 
    [dining] => 1 
    [family] => 0 
    [bed] => 0 
    [bath] => 1 
    [half_bath] => 0 
    [parking] => 0 
    [car_storage] => 0 
    [pool] => 0 
    [miscellaneous] => 0 
) 

bunun gibi:

model function query returns empty result set

cevap

1

konu aşağıdaki kod snippet'iyle: işliyor

foreach($query->result() as $row) 
{ 
    foreach($row as $k=>$v) 
    { 
     $data["$k"] = $v; //build an associative array with the values of each field for the one row I am querying 
    } 
} 

yolu döndürülür her sonuç için, ilgili anahtarlar ile $data üzerine yazar olmasıdır. Ancak, $query->result() istediğiniz satırı döndürdüğünden, false döndürdüğünden, dizi aslında şu şekilde olur: $data[] = false;, yani tüm diziyi yanlış/boş olarak ayarlayın.

olmak döngü değiştirirseniz, döngü içindeki kod $query->result() yanlış değeri için yürütülmez:

while ($row = $query->result()) 
{ 
    // your code 
} 

Bu size daha Şunu dönmek niyetinde eğer fazlalaştı Bundan sonra, mevcut değerlerin üzerine yazılacağı için işe yaramaz.

+0

Doğru yarasa, sorgu boş veri kümesi döndürmemelidir. Sorun budur. Aynı giriş parametrelerini kullanarak sorguyu gerçekleştiriyorum. Sorgu, verileri, tam olarak aynı verileri, zamanın% 100'ünü döndürmelidir. Tamam, sadece denedim, sorgu hala başarısız (veri döndü). Yani, 'while' döngüsü 'foreach' döngüsünden hiçbir fark yaratmaz. – TARKUS

+0

Tamam, sorun benim kodumdu, sorgu değildi. Şifrelenmiş bir "as_id" iletiyordum, ancak seçim sorgusunu oluşturmadan önce şifresini çözmek için ihmal edildi. Bu yüzden bazen işe yaramaz ve başkalarına değil. Bazı nedenlerden dolayı MySQL şifreli 'as_id''in INT tipindeki mevcut as_id ile eşleşmesine izin verdi.Şifreyi çözdükten sonra, sorgu sonuçları tahmin edilebilir oldu. Bu, SO üyeleri tarafından aldatılmayı beklemeyeceğim bir şey. Teşekkürler. – TARKUS

+1

Sevindim, sıralandı. Sorguyu çıkarmak ve sonra onu çalıştırmak için söyleyecektim. Sanırım bu sorunu da gündeme getirebilirdi. – gabe3886

0

Tamam, sorun benim kodumdu, sorgu değildi. Şifrelenmiş bir as_id geçiriyordum, ancak seçim sorgusunu oluşturmadan önce şifresini çözmek için ihmal edildi. Bu yüzden bazen işe yaramaz ve başkalarına değil. Bazı nedenlerden dolayı MySQL şifrelenmiş as_id'un mevcut AS_t tipi as_id ile eşleşmesine izin verdi. Şifreyi çözdükten sonra, sorgu sonuçları tahmin edilebilir oldu. Bu, SO üyeleri tarafından aldatılmayı beklemeyeceğim bir şey. Teşekkürler.

public function getAssetFeatures($as_id) 
{ 
    $as_id = $this->utilityclass->decryption9($as_id); // <- I had this commented out. In fact, I removed the line from my example code in the original post, because I didn't think it was important to the question. Not only was it important, it was the problem! 
    $data = array(); 
    $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '".DATABASE."' AND TABLE_NAME = 'as_features';"; 
    $query = $this->db->query($sql);