我有多个函数,每个函数都运行自己需要在事务中的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
谢谢,我希望有人可以帮助我,我希望将来有人在这个问题得到解答时偶然发现这个问题!
答案 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;