PHP静态$链接从db函数到db对象的事务查询

时间:2010-03-05 00:38:15

标签: php mysql oop static hyperlink

我有多个函数,每个函数都运行自己需要在事务中的SQL查询...我使用静态$ link来保存必须传递函数之间的链接...例如:

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);
}

目前这种方式非常出色...我可以在不同的文件中进行多个函数调用,而不必传递$ link。

问题是现在我想在一个对象中做一切异常处理,我不知道如何在多个对象实例上复制相同的静态变量......

我认为它会是这样的:

class db{
    static $link;

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

}

问题是......函数中的静态变量对于整个页面加载保持活动状态,但是对象内的静态链接只存在于对象中吗?

pconnect也不是一个选项:P messy stuff

那么我怎么能解决这个问题?使用对象。谷歌搜索后我真的找不到任何东西,所以我得到的印象是我做的事与其他人有点不同。在我的事务中,我有各种各样的函数调用。

我还有很多代码......一周大约一年60小时,所以我没有记住整个应用程序! :P

谢谢,我希望有人可以帮助我,我希望将来有人在这个问题得到解答时偶然发现这个问题!

1 个答案:

答案 0 :(得分:1)

如果在脚本开头声明对象(即作为全局对象),只要脚本运行,它就应该处于活动状态。这就是我的基本SQL类:

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);   

    }



}

然后在你脚本的某处你会做:

$db = new SQL_Connection;