gpt4 book ai didi

从 db 函数到 db 对象的 PHP static $link 用于事务查询

转载 作者:行者123 更新时间:2023-11-29 01:02:10 25 4
gpt4 key购买 nike

我有多个函数,每个函数都运行自己的 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

谢谢,我希望有人能帮助我,如果有人回答了这个问题,我希望将来有人偶然发现这个问题!

最佳答案

如果您在脚本的开头声明您的对象(即作为全局对象),那么只要您的脚本运行,它就应该一直存在。这是我的基本 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;

关于从 db 函数到 db 对象的 PHP static $link 用于事务查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2383783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com