Işlem sorguları için db nesne db işlevi PHP statik $ link

1 Cevap php

Ben birden fazla işlevleri vardır, her bir işlem içinde olması gerekiyor, kendi SQL sorgusu çalıştıran ... Ben mesela fonksiyonlar ... arasındaki bağlantıları etrafında geçmek zorunda kaydetmek için statik $ bağlantısını kullanıyorum:

function db() {
 $user = "username";
 $pass = "password";
 $db = "database";
 $server = "localhost";
 static $link;

 if(is_null($link)){
  $link = @mysql_connect( $server, $user, $pass );
 }

mysql_select_db( $db, $link );
return $link;
}

function transactionWrapper($id){
    $link = db();
    # Start transaction
    mysql_query("SET autocommit=0",$link);
    # Get name from other function, but keep this function within the ACID transaction by using the same link
    $name = getName($id);
    mysql_query("UPDATE tbl2 SET name = '{$name}' WHERE id = '2'",$link);
    # Commit transaction
    mysql_query("COMMIT",$link);
}


function getName($id){
    $link = db();
    $result = mysql_query("SELECT name FROM user WHERE id = '{$id}'",$link);
    return mysql_result($result,0,0);
}

Bu anda zekice çalışır ... Ben farklı dosya içinde birden fazla fonksiyon çağrıları var ve $ linke etrafında geçmek zorunda değildir.

Sorun istisna yönetimi için bir nesneye her şeyi yapmak istiyorum ve ben birden çok nesne örnekleri üzerine aynı statik değişkeni çoğaltmak için nasıl bilmiyorum artık ...

Ben gibi bir şey olacağını düşündüm:

class db{
    static $link;

    function db(){
        # if link is null, create it with mysql_connect, otherwise return the link
    }

}

Sorun bir işlev içinde bir statik değişken tüm bir sayfa yük için hayatta kalır, ama bir nesne içindeki statik bağlantı yalnızca nesne sağ içinde var ... nedir?

P dağınık şeyler: pconnect bir seçenek değil ya

Peki nasıl bu çevrede alabilirim? Nesneleri kullanarak. Ben tür biraz farklı, diğer insanlara şeyleri yapıyorum izlenim olsun ben gerçekten çok uzun googling sonra bir şey bulamadı. Benim işlem içinde ben çeşitli şeyler için fonksiyon çağrıları taşırlar.

Ben de kod sürü var ... 60 saat, bir haftada yaklaşık bir yıl aklımda tüm uygulama recode yoktu yani! : P

Teşekkürler, ben birisi bana yardımcı olabilir umut ve cevap eğer ben gelecekte bu sorunun üzerine başkası stumbles umut!

1 Cevap

Eğer senaryonun başında nesneye bildirirseniz (yani, küresel olarak), bu sürece komut çalışır gibi hayatta olmalıdır. Bu benim temel SQL sınıf gibi görünüyor budur:

class SQL_Connection {

    var $connection;


    function __construct() {

        $this->connection = mysql_pconnect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());

        mysql_select_db(DB_TABLE, $this->connection) or die(mysql_error());

    }

    function query($query){

        return mysql_query($query, $this->connection);   

    }



}

Sonra bir yerde size komut sen yapardın:

$db = new SQL_Connection;