У меня есть несколько функций, каждая из которых выполняет свой собственный запрос 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
Спасибо, я надеюсь, что кто-то может мне помочь, и я надеюсь, что кто-то еще наткнется на этот вопрос в будущем, если он ответит!