Php MySQL事务-更新2个表

Php MySQL事务-更新2个表,php,mysql,sql,Php,Mysql,Sql,我有一个表单,要求用户验证他们的电子邮件地址,该链接作为 http://app.myurl.org/h/activate.php?email=useremail%40gmail.com&key=80fddb7fa21dd2e2639ae5ec82b9d511&api=8a2d01d7411ec2488307744ddf070a4d 用户被引导到activate.php 我正在尝试从url获取电子邮件,键,以及api 然后我尝试更新用户表和花名册表 wrightway\u花名册要更新的表列是激活

我有一个表单,要求用户验证他们的电子邮件地址,该链接作为

http://app.myurl.org/h/activate.php?email=useremail%40gmail.com&key=80fddb7fa21dd2e2639ae5ec82b9d511&api=8a2d01d7411ec2488307744ddf070a4d

用户被引导到activate.php

我正在尝试从url获取
电子邮件
,以及
api

然后我尝试更新用户表和花名册表

wrightway\u花名册
要更新的表列是
激活

wrightway\u用户
要更新的表列是

它们都传递MD5随机散列的唯一值。一切都很顺利,只是没有事务查询

<?php
include ('database_connection.php');
if (isset($_GET['email']) && preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/', $_GET['email'])) { $email = $_GET['email']; }
if (isset($_GET['key']) && (strlen($_GET['key']) == 32)) { $key = $_GET['key'];}
if (isset($_GET['api']) && (strlen($_GET['api']) == 32)) { $API = $_GET['api'];}
if (isset($email) && isset($key)) {
    mysqli_query($dbc, "START TRANSACTION");
    $result_activate_account = mysqli_multi_query($dbc,"
       UPDATE table_users SET groups=[99] WHERE(pinAPP_API ='$API') LIMIT 1;
       UPDATE wrightway_roster SET Activation=NULL WHERE(email ='$email' AND Activation='$key')LIMIT 1;
    ");
    if ($result_activate_account !== false) {
        mysqli_query($dbc, "COMMIT");
        echo '<div>You may now proceed.</div>';
    } else {
        mysqli_query($dbc, "ROLLBACK");
        echo '<div>Oops !You could not be validated. Please recheck the link or contact your hiring manager.</div>';
    }
    mysqli_close($dbc);
} else {
    echo '<div>An Error Occurred.</div>';
}
?>

您是否尝试过mysqli_begin_transaction()、mysqli_rollback()和mysqli_commit()函数,而不是在mysqli_query()中调用begin transaction

文件:


MySQL不接受此语法

UPDATE wrightway_users SET groups=[99] ...
                                  ^  ^
也许其中一个更有效:

UPDATE wrightway_users SET groups=99 ...
UPDATE wrightway_users SET groups="99"
UPDATE wrightway_users SET groups="[99]"
根据您的需要和组的类型


阅读似乎证实了这一点。

你确定你的错误不在其他地方吗?就像99周围的括号一样

我收到这个错误:

#1064 - You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near '[33] where id=1' at line 1

您可以使用来检查最后一个错误。

能够使其正常工作。这就是我使用的,并且完全按照需要工作

if (isset($email) && isset($key)) {
    mysqli_query($dbc);
    $verified = mysqli_query($dbc,"
       UPDATE tbl_users t1, tbl_roster t2 SET t1.groups='[22]', t2.prescreen='0' WHERE t1.API='$API' AND t2.API='$API' AND t2.prescreen='$key';
    ");
    if ($verified !== false) {
        mysqli_query($dbc);
        echo '<br><center><div class="success"></div>';

    } 
    else {
        mysqli_query($dbc);
        echo '<br><div class="validation"></div>';
    }
    mysqli_close($dbc);
  } else {
    echo '<br><div class="error">An Error Occurred.</div>';
}
if(isset($email)和&isset($key)){
mysqli_查询($dbc);
$verified=mysqli\u查询($dbc,“
更新tbl_用户t1,tbl_花名册t2 SET t1.groups='[22]',t2.prescreen='0',其中t1.API='$API'和t2.API='$API'和t2.prescreen='$key';
");
如果($verified!==false){
mysqli_查询($dbc);
回声“
”; } 否则{ mysqli_查询($dbc); 回声“
”; } mysqli_close($dbc); }否则{ 回显“
发生错误”; }
一个事务中可以有多个语句。激活是否可以为空?但就像hd1所说的,我会做两次mysqli_查询,然后根据查询结果决定是提交还是回滚。是的,因为它只使用了一次,然后该字段就不适合该特定用户。我尝试了两次单独的查询,但都无法使其正常工作,所以我正在仔细阅读如何执行该查询,并且发现了使用这种替代方案的建议。给我一秒钟,我会把它切碎,写两篇,或者至少写我遇到麻烦时的位置。这是什么意思?我自己从来没有使用过这种符号。这可能是我所了解的问题,但是我有其他mysqli查询,它有[#]和帖子。也许你使用了
“[#]”
?用[99]运行这样的查询会让我明白:/*SQL错误(1064):你的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在“[99]…*”附近使用的正确语法我也认为[]的使用是个问题。我必须让[]围绕着这个值。给我一点时间,我想我可能拥有它。MySQL不接受
=[xx]
语法,所以可能需要告诉dreamweaver使用
MySQL
,而不是
SQL server
?(DW设置)
if (isset($email) && isset($key)) {
    mysqli_query($dbc);
    $verified = mysqli_query($dbc,"
       UPDATE tbl_users t1, tbl_roster t2 SET t1.groups='[22]', t2.prescreen='0' WHERE t1.API='$API' AND t2.API='$API' AND t2.prescreen='$key';
    ");
    if ($verified !== false) {
        mysqli_query($dbc);
        echo '<br><center><div class="success"></div>';

    } 
    else {
        mysqli_query($dbc);
        echo '<br><div class="validation"></div>';
    }
    mysqli_close($dbc);
  } else {
    echo '<br><div class="error">An Error Occurred.</div>';
}