Mysql_result of MySQLi eşdeğer (?)

7 Cevap php

Ben MySQLi için mysql bazı eski PHP kodu taşıma, ve ben küçük bir pürüz koştu ettik.

Eski mysql_result() işlevine eşdeğer var mı?

Ben fazla 1 satır ile çalışıyoruz mysql_result(), diğer fonksiyonları daha yavaş olduğunu biliyorum, ama çok zaman ben sadece 1 sonuç ve 1 alan var. Bunu kullanarak beni 1'e 4 satır yoğunlaşmasına olanak sağlar.

Eski kodu:

if ($r && mysql_num_rows($r))  
    $blarg = mysql_result($r, 0, 'blah');

İstenilen kodu:

if ($r && $r->num_rows)  
    $blarg = $r->result(0, 'blah');

Ama böyle bir şey yoktur. (

Kaçırdığım bir şey var mı? Ya ben onu emmek ve her şeyi yapmak zorunda gidiyorum:

if ($r && $r->num_rows)  
{  
    $row = $r->fetch_assoc();  
    $blarg = $row['blah'];  
}

7 Cevap

PHP 5.4 şimdi bunu anlamına gelir, function array dereferencing destekler:

if ($r && $r->num_rows)  
{  
    $row = $r->fetch_assoc()['blah'];  
}

Eh, her zaman böyle bir şey kısaltabilir:

if ($r && $r->num_rows)
    list($blarg) = $r->fetch_row();

Eğer almak için gidiyoruz gibi ama bu kadar iyi olabilir.

Bir nesneyi alma yerine bir dizi yapabilirsiniz.

$mysqli->query("SELECT email FROM users WHERE userid = 'foo'")->fetch_object()->email;

Böyle zincirleme yöntemi kullanmak için PHP 5 + gerekir.

Eğer procuedural mysqli kullanmak Alternatif olarak, eğer bu mysql_result maçları kendi mysqli_result işlevi yazmak kolaydır.

Ben her iki yaparak bir sonuç elde edebilmek için için Cris çözüm bu satırı eklemek için önermek db_result('mytable.myfield) ve db_result('myfield') bu orignial mysql_result işlevinin varsayılan davranış olduğundan .

function db_result($result,$row,$field) { 
    if($result->num_rows==0) return 'unknown'; 
    $result->data_seek($row);
    $ceva=$result->fetch_assoc(); 
    return (isset($ceva[$field])?$ceva[$field]
        :(strpos($field,'.')?$ceva[substr($field,strrpos($field,'.')+1)]:'')); 
}

answered, düşündüm ederken ben aynı soruyu yaptıktan sonra verilen cevap artırabilirsiniz. Aşağıdaki fonksiyonu tam mysql_result () fonksiyonu çoğaltır, ve sizin talebinize out-of-sınırları olduğunda false döndürür (boş sonuç, bu sayının, bu sayının hiçbir sütunun hiçbir satır). Bu satırı belirtmek yoksa, bu (daha az bir değer Geçilecek) 0,0 varsayar, yararı var.

function mysqli_result($res,$row=0,$col=0){
    if (mysqli_num_rows($res) && $row <= (mysqli_num_rows($res)-1) && $row >= 0){
        mysqli_data_seek($res,$row);
        $resrow = mysqli_fetch_row($res);
        if (isset($resrow[$col])){
            return $resrow[$col];
        }
    }
    return false;
}

Eğer sorguda sadece TEK alanı seçin ve yalnızca seçilen alanın bir tek döndürülen verileri bekliyoruz o zaman bu işleri:

function mysqli_datum($result)
{
if ($result->num_rows == 0)
    return;
$result->data_seek(0);
$row=$result->fetch_row();     
return $row[0];
}

Eğer veritabanı bağlantısı yapmak için sağlam bir kitaplığa arıyorsanız, ben kullanmanızı öneririm AdoDB. Bu kitaplığı birden çok veritabanına bağlanabilir ve veritabanı değiştirmek eğer sürece belli bir veritabanı altyapısı için herhangi bir spesifik SQL içermez gibi, sorgu yazmak zorunda değilsiniz. Bir kullanım örnek için this page edin. Eğer PHP5 kullanarak eğer Ayrıca, kullanabilirsiniz foreach for iteration.

Ben bu daha sağlam ve çapraz veritabanı kod herhangi bir eski kodları dönüştürmek yardımcı olacağını umuyoruz.