php – MySQL事务 – 更新2个表
我有一个表单,要求用户验证他们的电子邮件地址,该链接将发送给用户
http://app.myurl.org/h/activate.php?email=useremail@gmail.comu0026amp;key=80fddb7fa21dd2e2639ae5ec82b9d511u0026amp;api=8a2d01d7411ec2488307744ddf070a4d 用户被定向到activate.php 我试图从网址获取电子邮件,密钥和API. 然后我尝试更新用户表和名册表. 要更新的wrightway_roster表列是激活 wrightway_users要更新的表列是组 它们都传递MD5随机散列的唯一值.一切都很顺利,而不是TRANSACTION查询. <?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>'; } ?> PHP是5.4 Native 激活和组都是VARCHAR 这些查询起作用,并且完全符合预期. “UPDATE wrightway_users SET groups ='[99]’WHERE(pinAPP_API =’$API’)LIMIT 1;”; UPDATE wrightway_roster SET Activation = NULL WHERE(email =’$email’AND Activation =’$key’)LIMIT 1“; 我正在使用单个查询或者我需要它做什么,我写了上面的内容来使用Transactions. if (isset($email) && isset($key)) { // Update the database to set the "activation" field to null $query_activate_account = "UPDATE wrightway_users SET groups='[99]' WHERE(pinAPP_API ='$API') LIMIT 1;"; $result_activate_account = mysqli_query($dbc,$query_activate_account); // Print a customized message: if (mysqli_affected_rows($dbc) == 1) //if update query was successful { echo '<div>You may now proceed.</div>'; } else { 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>'; } 解决方法
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]" 根据您的需要和团体类型. 阅读this answer似乎证实了这一点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |