我有一个表单,要求用户验证他们的电子邮件地址,该链接将发送给用户
http://app.myurl.org/h/activate.PHP?email=useremail@gmail.com\u0026amp;key=80fddb7fa21dd2e2639ae5ec82b9d511\u0026amp;api=8a2d01d7411ec2488307744ddf070a4d
然后我尝试更新用户表和名册表.
要更新的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似乎证实了这一点.