PHP mySQL - Bir numara indeksi ile ilişkili bir dizi iade edebilir miyim?

5 Cevap php

Benim db sınıfında bu yöntemi var

public function query($queryString)
    {

    	if (!$this->_connected) $this->_connectToDb(); //connect to database

    	$results = mysql_query($queryString, $this->_dbLink) or trigger_error(mysql_error());


    	return mysql_num_rows($results) > 0 ? mysql_fetch_assoc($results) : false;  		




    }

Bu 1 satır döndüren sorgular için çok çalışır, ancak bir dizi böyle bir şey geri nasıl alabilirim?

$array[0]['name'] = 'jim'
$array[0]['id'] =  120
$array[1]['name'] = 'judith' 
$array[1]['ID'] = 121

Şimdi ben şöyle diziye bu veri eklemek için bir süre döngü kullanabilirsiniz biliyorum, ama PHP bir iç fonksiyonu ile bu yapabileceğini merak ediyordum? Ben sonra kulüpler ne dokümanlar üzerinde bulmak mümkün olmuştur havn't.

Ben iade ne zaman dizinin üzerinde geri yinelemek için gidiyorum ve ben oldukça (performans nedenlerle) iki sonuçları üzerinden çalıştırmak istiyorum çünkü ben yöntemi içinde süre çalıştırmak istemiyorum nedenidir.

Bunu yapmak için bir yolu var mı? Benim genel sorgu yöntemi tasarımı ile ilgili bir sorun var mı?

Muchly teşekkür ederiz!

5 Cevap

public function query($queryString)
    {

        if (!$this->_connected) $this->_connectToDb(); //connect to database

        $results = mysql_query($queryString, $this->_dbLink) or trigger_error(mysql_error());

        $data = array();
        while($row = mysql_fetch_assoc($results))
         {
    	       $data[] = $row;
         }
        return $data;

    }

bu her zaman bir dizi döndürür.

EDIT: I didn't read the question well. If you realy don't want to use the loop then I would do this:

public function query($queryString)
    {

        if (!$this->_connected) $this->_connectToDb(); //connect to database

        return mysql_query($queryString, $this->_dbLink) or trigger_error(mysql_error());

    }

sonra üzerine döngü, ancak ben sadece döngü kullanmak olacaktır.

fikirler için teşekkürler. Ben (Moodle kullanılan) sql bir ilişkisel dizi döndüren bir işlevi var.

$ Sonuç = get_records_sql ($ sql);

//to create a numerically indexed array:
$data = array();
foreach ($results as $row)
     {
           $data[] = $row;
     }
return $data;

}

Ayrıca PDO uzantısı bakmak isteyebilirsiniz. Sen bir diziye tüm sonuç kümesini yükleyebilir veya foreach döngü kullanarak yapabilirsiniz.

<?php
$db = new PDO($connection_string, $username, $password);
$result = $db->query($queryString);
foreach($result as $row) {
    // do something
}

// or

$result = $db->query($queryString);
$result_array = $result->fetchAll(PDO::FETCH_ASSOC);
?>

Çoğu kişi tam olarak ne istediğinizi yapmak için sorguda bir while() döngü ve sonra işlemek için dizi üzerinde döngü.

Ancak, haklısın: o büyük bir veri kümesi ile ilgili bir sorun olabilir, hangi bellek harcar. Sorgu yöntemi resultset kaynak dönmek için bir alternatiftir. Bunu gerektirir Sonra ise döngü her satır almak için kullanabilirsiniz.

Uzakta, ben senin için bunu yapmak için başka bir sınıf öneririm soyut. Sonra sorgu çağrı bir örnek değişkeni olarak MySQL resultset kaynak vardır ve paketler kadar mysql_fetch_assoc() çağrıyı bu sınıfın yeni bir örneğini dönecekti.

Bak PEAR::MDB2 (Quickstart Cheatsheet). Böyle bir şey yapmak için farklı fonksiyonların bir sürü sağlar. Bir veritabanı soyutlama katmanı çünkü Ayrıca, MySQL belirli fonksiyonları kullanarak içine aşağı kravat değil.

$ Result = $ db-> queryRow ($ sorgu, MDB2_FETCHMODE_ASSOC);

ADO gibi diğer soyutlama katmanları da vardır.