本文整理汇总了PHP中XDB::startTransaction方法的典型用法代码示例。如果您正苦于以下问题:PHP XDB::startTransaction方法的具体用法?PHP XDB::startTransaction怎么用?PHP XDB::startTransaction使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XDB
的用法示例。
在下文中一共展示了XDB::startTransaction方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: dirname
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
***************************************************************************/
/* This script send the mails waiting in the database */
require_once 'smarty/Smarty.class.php';
require_once dirname(__FILE__) . '/../connect.db.inc.php';
set_time_limit(0);
XDB::startTransaction();
$res = XDB::query('SELECT id, target, writer, writername, title, body, ishtml
FROM mails
WHERE processed IS NULL')->fetchAllRow();
$ids = array();
if (count($res) == 0) {
exit;
}
foreach ($res as $r) {
$ids[] = $r[0];
}
XDB::execute('UPDATE mails
SET processed = NOW()
WHERE id IN {?}', $ids);
XDB::commit();
foreach ($res as $r) {
示例2: handler_register_ext
function handler_register_ext($page, $hash = null)
{
XDB::execute('DELETE FROM register_pending_xnet
WHERE DATE_SUB(NOW(), INTERVAL 1 MONTH) > date');
$res = XDB::fetchOneAssoc('SELECT uid, hruid, email
FROM register_pending_xnet
WHERE hash = {?}', $hash);
if (is_null($hash) || is_null($res)) {
$page->trigErrorRedirect('Cette adresse n\'existe pas ou n\'existe plus sur le serveur.', '');
}
if (Post::has('pwhash') && Post::t('pwhash')) {
XDB::startTransaction();
XDB::query('UPDATE accounts
SET password = {?}, state = \'active\', registration_date = NOW()
WHERE uid = {?} AND state = \'pending\' AND type = \'xnet\'', Post::t('pwhash'), $res['uid']);
XDB::query('DELETE FROM register_pending_xnet
WHERE uid = {?}', $res['uid']);
XDB::commit();
S::logger($res['uid'])->log('passwd', '');
// Try to start a session (so the user don't have to log in); we will use
// the password available in Post:: to authenticate the user.
Post::kill('wait');
Platal::session()->startAvailableAuth();
$page->changeTpl('xnet/register.success.tpl');
$page->assign('email', $res['email']);
} else {
$page->changeTpl('platal/password.tpl');
$page->assign('xnet', true);
$page->assign('hruid', $res['hruid']);
$page->assign('do_auth', 1);
}
}
示例3: vote
public function vote($answer)
{
XDB::startTransaction();
XDB::execute('INSERT INTO qdj_votes
SET qdj = {?}, uid = {?}, rank = 0, rule = "null"', $this->id(), S::user()->id());
$vote = XDB::insertID();
// Get the rank
$rank = XDB::query('SELECT COUNT(*)+1
FROM qdj_votes
WHERE qdj = {?} AND rank != 0', $this->id())->fetchOneCell();
if ($rank == 1) {
if ($this->writer === null) {
$this->select(QDJSelect::all());
}
XDB::execute('INSERT INTO qdj_votes
SET qdj = {?}, uid = {?}, rank = 0, rule = 10', $this->id(), $this->writer->id());
}
$rule = null;
switch ($rank) {
case 1:
$rule = '1';
break;
case 2:
$rule = '2';
break;
case 3:
$rule = '3';
break;
case 13:
$rule = '4';
break;
case 42:
$rule = '5';
break;
case 69:
$rule = '6';
break;
case 314:
$rule = '7';
break;
case substr(strrchr(IPAddress::get(), '.'), 1):
$rule = '8';
break;
case date('d') + date('m'):
$rule = '9';
break;
}
XDB::execute('UPDATE qdj_votes
SET rank = {?}, rule = {?}
WHERE vote_id = {?}', $rank, $rule, $vote);
XDB::commit();
if ($answer == 1) {
XDB::execute('UPDATE qdj SET count1 = count1+1 WHERE id={?}', $this->id());
} else {
XDB::execute('UPDATE qdj SET count2 = count2+1 WHERE id={?}', $this->id());
}
}
示例4: insert
public function insert()
{
XDB::startTransaction();
XDB::execute('INSERT INTO surveys SET writer = {?}', S::user()->id());
$this->id = XDB::insertId();
foreach ($this->questions as $question) {
$question->insert($ssid);
}
XDB::commit();
}
示例5: handler_add_secondary_edu
function handler_add_secondary_edu($page)
{
$page->changeTpl('admin/add_secondary_edu.tpl');
if (!(Post::has('verify') || Post::has('add'))) {
return;
} elseif (!Post::has('people')) {
$page->trigWarning("Aucune information n'a été fournie.");
return;
}
require_once 'name.func.inc.php';
$lines = explode("\n", Post::t('people'));
$separator = Post::t('separator');
$degree = Post::v('degree');
$promotion = Post::i('promotion');
$schoolsList = array_flip(DirEnum::getOptions(DirEnum::EDUSCHOOLS));
$degreesList = array_flip(DirEnum::getOptions(DirEnum::EDUDEGREES));
$edu_id = $schoolsList[Profile::EDU_X];
$degree_id = $degreesList[$degree];
$res = array('incomplete' => array(), 'empty' => array(), 'multiple' => array(), 'already' => array(), 'new' => array());
$old_pids = array();
$new_pids = array();
foreach ($lines as $line) {
$line = trim($line);
$line_array = explode($separator, $line);
array_walk($line_array, 'trim');
if (count($line_array) != 3) {
$page->trigError("La ligne « {$line} » est incomplète.");
$res['incomplete'][] = $line;
continue;
}
$cond = new PFC_And(new UFC_NameTokens(split_name_for_search($line_array[0]), array(), false, false, Profile::LASTNAME));
$cond->addChild(new UFC_NameTokens(split_name_for_search($line_array[1]), array(), false, false, Profile::FIRSTNAME));
$cond->addChild(new UFC_Promo('=', UserFilter::DISPLAY, $line_array[2]));
$uf = new UserFilter($cond);
$pid = $uf->getPIDs();
$count = count($pid);
if ($count == 0) {
$page->trigError("La ligne « {$line} » ne correspond à aucun profil existant.");
$res['empty'][] = $line;
continue;
} elseif ($count > 1) {
$page->trigError("La ligne « {$line} » correspond à plusieurs profils existant.");
$res['multiple'][] = $line;
continue;
} else {
$count = XDB::fetchOneCell('SELECT COUNT(*) AS count
FROM profile_education
WHERE pid = {?} AND eduid = {?} AND degreeid = {?}', $pid, $edu_id, $degree_id);
if ($count == 1) {
$res['already'][] = $line;
$old_pids[] = $pid[0];
} else {
$res['new'][] = $line;
$new_pids[] = $pid[0];
}
}
}
$display = array();
foreach ($res as $type => $res_type) {
if (count($res_type) > 0) {
$display = array_merge($display, array('--------------------' . $type . ':'), $res_type);
}
}
$page->assign('people', implode("\n", $display));
$page->assign('promotion', $promotion);
$page->assign('degree', $degree);
if (Post::has('add')) {
$entry_year = $promotion - Profile::educationDuration($degree);
if (Post::b('force_addition')) {
$pids = array_unique(array_merge($old_pids, $new_pids));
} else {
$pids = array_unique($new_pids);
// Updates years.
if (count($old_pids)) {
XDB::execute('UPDATE profile_education
SET entry_year = {?}, grad_year = {?}, promo_year = {?}
WHERE pid IN {?} AND eduid = {?} AND degreeid = {?}', $entry_year, $promotion, $promotion, $old_pids, $edu_id, $degree_id);
}
}
// Precomputes values common to all users.
$select = XDB::format('MAX(id) + 1, pid, {?}, {?}, {?}, {?}, {?}, \'secondary\'', $edu_id, $degree_id, $entry_year, $promotion, $promotion);
XDB::startTransaction();
foreach ($pids as $pid) {
XDB::execute('INSERT INTO profile_education (id, pid, eduid, degreeid, entry_year, grad_year, promo_year, flags)
SELECT ' . $select . '
FROM profile_education
WHERE pid = {?}
GROUP BY pid', $pid);
}
XDB::commit();
}
}
示例6: saveArticle
/** Save an article
* @p $a A reference to a NLArticle object (will be modified once saved)
*/
public function saveArticle($a)
{
$this->fetchArticles();
// Prevent cid to be 0 (use NULL instead)
$a->cid = $a->cid == 0 ? null : $a->cid;
if ($a->aid >= 0) {
// Article already exists in DB
XDB::execute('UPDATE newsletter_art
SET cid = {?}, pos = {?}, title = {?}, body = {?}, append = {?}
WHERE id = {?} AND aid = {?}', $a->cid, $a->pos, $a->title, $a->body, $a->append, $this->id, $a->aid);
} else {
// New article
XDB::startTransaction();
list($aid, $pos) = XDB::fetchOneRow('SELECT MAX(aid) AS aid, MAX(pos) AS pos
FROM newsletter_art AS a
WHERE a.id = {?}', $this->id);
$a->aid = ++$aid;
$a->pos = $a->pos ? $a->pos : ++$pos;
XDB::execute('INSERT INTO newsletter_art (id, aid, cid, pos, title, body, append)
VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?})', $this->id, $a->aid, $a->cid, $a->pos, $a->title, $a->body, $a->append);
XDB::commit();
}
// Update local ID of article
$this->arts[$a->aid] = $a;
}
示例7: rebuildSearchTokens
public static function rebuildSearchTokens($pids, $transaction = true)
{
require_once 'name.func.inc.php';
if (!is_array($pids)) {
$pids = array($pids);
}
$keys = XDB::iterator("(SELECT pid, name, type, IF(type = 'nickname', 2, 1) AS score, '' AS public\n FROM profile_private_names\n WHERE pid IN {?})\n UNION\n (SELECT pid, lastname_main, 'lastname' AS type, 10 AS score, 'public' AS public\n FROM profile_public_names\n WHERE lastname_main != '' AND pid IN {?})\n UNION\n (SELECT pid, lastname_marital, 'lastname' AS type, 10 AS score, 'public' AS public\n FROM profile_public_names\n WHERE lastname_marital != '' AND pid IN {?})\n UNION\n (SELECT pid, lastname_ordinary, 'lastname' AS type, 10 AS score, 'public' AS public\n FROM profile_public_names\n WHERE lastname_ordinary != '' AND pid IN {?})\n UNION\n (SELECT pid, firstname_main, 'firstname' AS type, 10 AS score, 'public' AS public\n FROM profile_public_names\n WHERE firstname_main != '' AND pid IN {?})\n UNION\n (SELECT pid, firstname_ordinary, 'firstname' AS type, 10 AS score, 'public' AS public\n FROM profile_public_names\n WHERE firstname_ordinary != '' AND pid IN {?})\n UNION\n (SELECT pid, pseudonym, 'nickname' AS type, 10 AS score, 'public' AS public\n FROM profile_public_names\n WHERE pseudonym != '' AND pid IN {?})", $pids, $pids, $pids, $pids, $pids, $pids, $pids);
$names = array();
while ($key = $keys->next()) {
if ($key['name'] == '') {
continue;
}
$pid = $key['pid'];
$toks = split_name_for_search($key['name']);
$toks = array_reverse($toks);
/* Split the score between the tokens to avoid the user to be over-rated.
* Let says my user name is "Machin-Truc Bidule" and I also have a user named
* 'Machin Truc'. Distributing the score force "Machin Truc" to be displayed
* before "Machin-Truc" for both "Machin Truc" and "Machin" searches.
*/
$eltScore = ceil((double) $key['score'] / (double) count($toks));
$token = '';
foreach ($toks as $tok) {
$token = $tok . $token;
$names["{$pid}-{$token}"] = XDB::format('({?}, {?}, {?}, {?}, {?}, {?})', $token, $pid, soundex_fr($token), $eltScore, $key['public'], $key['type']);
}
}
if ($transaction) {
XDB::startTransaction();
}
XDB::execute('DELETE FROM search_name
WHERE pid IN {?}', $pids);
if (count($names) > 0) {
XDB::rawExecute('INSERT INTO search_name (token, pid, soundex, score, flags, general_type)
VALUES ' . implode(', ', $names));
}
if ($transaction) {
XDB::commit();
}
}
示例8: handler_end
function handler_end($page, $hash = null)
{
global $globals;
$_SESSION['subState'] = array('step' => 5);
// Reject registration requests from unsafe IP addresses (and remove the
// registration information from the database, to prevent IP changes).
if (check_ip('unsafe')) {
send_warning_mail('Une IP surveillée a tenté de finaliser son inscription.');
XDB::execute("DELETE FROM register_pending\n WHERE hash = {?} AND hash != 'INSCRIT'", $hash);
return PL_FORBIDDEN;
}
// Retrieve the pre-registration information using the url-provided
// authentication token.
$res = XDB::query("SELECT r.uid, p.pid, r.forlife, r.bestalias, r.mailorg2,\n r.password, r.email, r.services, r.naissance,\n ppn.lastname_initial, ppn.firstname_initial, pe.promo_year,\n pd.promo, p.sex, p.birthdate_ref, a.type, a.email AS old_account_email\n FROM register_pending AS r\n INNER JOIN accounts AS a ON (r.uid = a.uid)\n INNER JOIN account_profiles AS ap ON (a.uid = ap.uid AND FIND_IN_SET('owner', ap.perms))\n INNER JOIN profiles AS p ON (p.pid = ap.pid)\n INNER JOIN profile_public_names AS ppn ON (ppn.pid = p.pid)\n INNER JOIN profile_display AS pd ON (p.pid = pd.pid)\n INNER JOIN profile_education AS pe ON (pe.pid = p.pid AND FIND_IN_SET('primary', pe.flags))\n WHERE hash = {?} AND hash != 'INSCRIT' AND a.state = 'pending'", $hash);
if (!$hash || $res->numRows() == 0) {
$page->kill("<p>Cette adresse n'existe pas, ou plus, sur le serveur.</p>\n <p>Causes probables :</p>\n <ol>\n <li>Vérifie que tu visites l'adresse du dernier\n email reçu s'il y en a eu plusieurs.</li>\n <li>Tu as peut-être mal copié l'adresse reçue par\n email, vérifie-la à la main.</li>\n <li>Tu as peut-être attendu trop longtemps pour\n confirmer. Les pré-inscriptions sont annulées\n tous les 30 jours.</li>\n <li>Tu es en fait déjà inscrit.</li>\n </ol>");
}
list($uid, $pid, $forlife, $bestalias, $emailXorg2, $password, $email, $services, $birthdate, $lastname, $firstname, $yearpromo, $promo, $sex, $birthdate_ref, $type, $old_account_email) = $res->fetchOneRow();
$isX = $type == 'x';
$mail_domain = User::$sub_mail_domains[$type] . $globals->mail->domain;
// Prepare the template for display.
$page->changeTpl('register/end.tpl');
$page->assign('forlife', $forlife);
$page->assign('firstname', $firstname);
// Check if the user did enter a valid password; if not (or if none is found),
// get her an information page.
if (Post::has('response')) {
$expected_response = sha1("{$forlife}:{$password}:" . S::v('challenge'));
if (Post::v('response') != $expected_response) {
$page->trigError("Mot de passe invalide.");
S::logger($uid)->log('auth_fail', 'bad password (register/end)');
return;
}
} else {
return;
}
//
// Create the user account.
//
XDB::startTransaction();
XDB::execute("UPDATE accounts\n SET password = {?}, state = 'active',\n registration_date = NOW(), email = NULL\n WHERE uid = {?}", $password, $uid);
XDB::execute("UPDATE profiles\n SET birthdate = {?}, last_change = NOW()\n WHERE pid = {?}", $birthdate, $pid);
XDB::execute('INSERT INTO email_source_account (email, uid, type, flags, domain)
SELECT {?}, {?}, \'forlife\', \'\', id
FROM email_virtual_domains
WHERE name = {?}', $forlife, $uid, $mail_domain);
XDB::execute('INSERT INTO email_source_account (email, uid, type, flags, domain)
SELECT {?}, {?}, \'alias\', \'bestalias\', id
FROM email_virtual_domains
WHERE name = {?}', $bestalias, $uid, $mail_domain);
if ($emailXorg2) {
XDB::execute('INSERT INTO email_source_account (email, uid, type, flags, domain)
SELECT {?}, {?}, \'alias\', \'\', id
FROM email_virtual_domains
WHERE name = {?}', $emailXorg2, $uid, $mail_domain);
}
XDB::commit();
// Try to start a session (so the user don't have to log in); we will use
// the password available in Post:: to authenticate the user.
Platal::session()->start(AUTH_PASSWD);
// Add the registration email address as first and only redirection.
require_once 'emails.inc.php';
$user = User::getSilentWithUID($uid);
$redirect = new Redirect($user);
$redirect->add_email($email);
fix_bestalias($user);
// If the user was registered to some aliases and MLs, we must change
// the subscription to her forlife email.
if ($old_account_email) {
$listClient = new MMList($user);
$listClient->change_user_email($old_account_email, $user->forlifeEmail());
update_alias_user($old_account_email, $user->forlifeEmail());
}
// Subscribe the user to the services she did request at registration time.
require_once 'newsletter.inc.php';
foreach (explode(',', $services) as $service) {
switch ($service) {
case 'ax_letter':
/* This option is deprecated by 'com_letters' */
NewsLetter::forGroup(NewsLetter::GROUP_AX)->subscribe($user);
break;
case 'com_letters':
NewsLetter::forGroup(NewsLetter::GROUP_AX)->subscribe($user);
NewsLetter::forGroup(NewsLetter::GROUP_EP)->subscribe($user);
NewsLetter::forGroup(NewsLetter::GROUP_FX)->subscribe($user);
break;
case 'nl':
NewsLetter::forGroup(NewsLetter::GROUP_XORG)->subscribe($user);
break;
case 'imap':
Email::activate_storage($user, 'imap', Bogo::IMAP_DEFAULT);
break;
case 'ml_promo':
if ($isX) {
$r = XDB::query('SELECT id FROM groups WHERE diminutif = {?}', $yearpromo);
if ($r->numRows()) {
$asso_id = $r->fetchOneCell();
XDB::execute('INSERT IGNORE INTO group_members (uid, asso_id)
VALUES ({?}, {?})', $uid, $asso_id);
try {
//.........这里部分代码省略.........