有没有办法在SQL Update语句中添加PHP IF语句

有没有办法在SQL Update语句中添加PHP IF语句,php,mysql,Php,Mysql,这是从个人资料更新页面;因此,如果一个人从tom@aol.com到tommy@aol.com我希望已验证的电子邮件2被重置为未验证 我的代码是 $updateSQL = sprintf("UPDATE user SET uname=%s,email=%s, email2=%s WHERE `uid`=%s && `pass_code`=%s", GetSQLValueString($_POST['uname'], "text"),

这是从个人资料更新页面;因此,如果一个人从tom@aol.com到tommy@aol.com我希望已验证的电子邮件2被重置为未验证

我的代码是

    $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"));
我也有一个现场电子邮件2_验证;目标是。。如果email2已更改,我希望它未经验证; 是否有一种方法可以在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"));
我猜isI最普通的方式可能是创建一个在update语句之前运行的select语句,然后

    if htmlentities($post['email2']) <> $row['email2']
            use update statement 1 
    else
            use update statement 2

这是最好的方法,还是有一个我不知道的php函数可以在运行时执行它?

您可以在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字段,触发器将处理其余部分。

您可以在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字段,触发器将处理其余部分。

您可以通过使用准备好的语句来实现这一点

意思是:您将创建一个带有占位符的查询。然后你可以这样写:

$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;
有关语句的更多信息,请查看此链接:


您可以通过使用准备好的语句来实现这一点

意思是:您将创建一个带有占位符的查询。然后你可以这样写:

$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;
有关语句的更多信息,请查看此链接:

只要这样做,我正在使用您的代码:

如果您想要SQL解决方案,请使用。

只要这样做,我正在使用您的代码:


如果您想要SQL解决方案,请使用。

您的代码格式非常糟糕:d您所说的粗体是什么意思?它的标准格式来自dreamweaver。。我不像这里的大多数人那样是专业人士:这是一个个人资料更新页面;因此,如果一个人从tom@aol.com到tommy@aol.com我希望已验证的email2\u被重置为“未验证”为什么要使用sprintf生成SQL查询?当所有最新版本的PHP都带有一个非常好的、防注入的PDO MySQL驱动程序时,为什么要调用GetSQLValueString全局函数呢?为什么要在SQL查询中运行PHP?您应该连接PHP以确定要运行哪个SQL查询。您的代码的格式非常糟糕:D您所说的粗体是什么意思?它的标准格式来自dreamweaver。。我不像这里的大多数人那样是专业人士:这是一个个人资料更新页面;因此,如果一个人从tom@aol.com到tommy@aol.com我希望已验证的email2\u被重置为“未验证”为什么要使用sprintf生成SQL查询?当所有最新版本的PHP都带有一个非常好的、防注入的PDO MySQL驱动程序时,为什么要调用GetSQLValueString全局函数呢?为什么要在SQL查询中运行PHP?您应该连接PHP以确定要运行哪个SQL查询。