这是来自个人资料更新页面;因此,如果某人将email2
从tom@aol.com更改为tommy@aol.com,我希望将email2_verified
重置为unverified
我的代码是..
$updateSQL = sprintf("UPDATE user SET uname=%s,email=%s, email2=%s WHERE `uid`=%s && `pass_code`=%s",
GetSQLValueString($_POST['uname'], "text"),
GetSQLValueString($_POST['email'], "text"),
GetSQLValueString($_POST['email2'], "text"),
GetSQLValueString($_POST['uid'], "int"),
GetSQLValueString($password, "text"));
我还有一个字段email2_verified
;目标是..如果email2
发生了变化,我想要unverified
;
有没有办法在sql语句中添加if语句,其作用类似于以下代码..?
$updateSQL = sprintf("UPDATE user SET uname=%s,email=%s, email2=%s
WHERE `uid`=%s && `pass_code`=%s,email2_verified=%s",
if($_POST['email2']){ // **has not changed**
GetSQLValueString($_POST['uname'], "text"),
GetSQLValueString($_POST['email'], "text"),
}
if($_POST['email2']){ //**has changed**
GetSQLValueString("unverified","text"),
}
GetSQLValueString($_POST['email2'], "text"),
GetSQLValueString($_POST['uid'], "int"),
GetSQLValueString($password, "text"));
我猜(最常见的方式是)我可能需要创建一个在update语句之前运行的select语句并且
if htmlentities($post['email2']) <> $row['email2']
use update statement 1
else
use update statement 2
是最好的方法还是有一个我不知道的PHP功能可以动态做到这一点?
答案 0 :(得分:2)
您可以通过使用预先准备好的陈述来达到此目的。
意味着:您将使用占位符创建查询。然后你可以这样写:
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
if(condition) {
$stmt->bind_param('sssd', $code, $language, $official, $percent);
} else {
$stmt->bind_param('abc', dbc, $language2, $officia2l, $percent2);
}
$stmt->execute;
检查此链接以获取有关语句的更多信息:
答案 1 :(得分:1)
您可以在MySQL中创建一个触发器。
DELIMITER //
CREATE TRIGGER detect_email_change BEFORE UPDATE ON user FOR EACH ROW
BEGIN
IF NEW.email2 != OLD.email2 THEN
SET NEW.email2_verified = "unverified";
END IF;
END;//
DELIMITER ;
然后你只需要更新email2字段,触发器将处理其余的事情。
答案 2 :(得分:0)
就这样做(我正在使用你的代码):
<?php
if ($_POST['email2']) {
// has changed
$sql = "UPDATE user SET uname=%s,email=%s, email2=%s " .
",email2_verified=%s " .
"WHERE `uid`=%s && `pass_code`=%s";
$updateSQL = sprintf(
$sql,
GetSQLValueString($_POST['uname'], "text"),
GetSQLValueString($_POST['email'], "text"),
GetSQLValueString("unverified","text")
GetSQLValueString($_POST['email2'], "text"),
GetSQLValueString($_POST['uid'], "int"),
GetSQLValueString($password, "text")
);
} else {
$sql = "UPDATE user SET uname=%s,email=%s, email2=%s " .
"WHERE `uid`=%s && `pass_code`=%s";
$updateSQL = sprintf(
$sql,
GetSQLValueString($_POST['uname'], "text"),
GetSQLValueString($_POST['email'], "text"),
GetSQLValueString($_POST['email2'], "text"),
GetSQLValueString($_POST['uid'], "int"),
GetSQLValueString($password, "text")
);
}
如果您需要SQL解决方案,请使用Kouber Saparev answer。