1
我有多个函数,每个函数都需要在事务内部运行自己的SQL查询......我使用静态$链接来保存必须通过围绕链接功能之间...例如:
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);
}
这出色的作品,此刻......我可以有不同的文件中的多个函数调用,而不必绕过$链接。
的问题是现在我想在异常处理的对象做的一切,我不知道如何复制在多个对象实例相同的静态变量...
我认为这会是这样的:
class db{
static $link;
function db(){
# if link is null, create it with mysql_connect, otherwise return the link
}
}
问题是...一个函数内的静态变量保持活着的整个页面加载,而是一个对象中的静态链接只有客体的权利中存在?
pconnect是不是一种选择,要么:P凌乱的东西
所以,我怎么能解决这个得到什么?使用对象。我搜索了很长时间后没有找到任何东西,所以我有一种印象,我对其他人的做法有点不同。在我的交易中,我有各种各样的函数调用。
我有很多代码以及...大约一周60小时,所以我没有整个应用程序重新编码! :P
谢谢,我希望有人能帮助我,我希望未来有人会在这个问题上磕磕绊绊,如果回答的话!
感谢您的答复,我有一点点去......这种但没有在另一个对象内 我在一个单独的文件中创建了一个DB函数,并在那里启动了DB对象。在调用db.class.php文件并使用$ db-> query('whatever');它的罚款......但在另一个对象内部,它似乎并不认为它好像从未启动过? 尝试了几件事,但似乎无法得到相同的效果,并在另一个对象 – 2010-03-05 22:44:42
内另一个对象?这可能是因为你已经在全球范围内定义了它。 试着把行放在“全球$ db;”放在对象定义的顶部。这将告诉PHP使用全球范围内的$ db。另一种方法是将两个对象结合起来,但我不确定这会有多少工作。 – Cetra 2010-03-10 02:56:43