【发布时间】:2011-01-23 22:28:21
【问题描述】:
我有多个函数,每个函数都运行自己的 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 乱七八糟的东西
那么我该如何解决呢?使用对象。在谷歌上搜索了这么久之后我真的找不到任何东西,所以我觉得我做的事情与其他人有点不同。在我的事务中,我有大量的函数调用来处理各种事情。
我也有很多代码......大约一年每周工作 60 小时,所以我没有考虑重新编码整个应用程序! :P
谢谢,我希望有人可以帮助我,如果有人回答,我希望将来有人偶然发现这个问题!
【问题讨论】:
标签: php mysql oop static hyperlink