2014-01-23 29 views
1

这是来自配置文件更新页面;因此,如果一个人改变了他们的email2[email protected][email protected]我想email2_verified被重置为unverified有没有办法在SQL更新声明中添加PHP IF语句

我的代码..

$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")); 

我猜(最外行的方法是)我可能会创建一个更新语句之前运行和

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

select语句是最好的办法还是有一个PHP函数我不知道可以在飞行中做到这一点?

+2

你的代码格式非常糟糕:D –

+0

这个大胆的“改变”是什么意思? –

+0

它的标准格式从dreamweaver ..我不是像大多数这里赞成:) – user3229526

回答

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

您可以通过使用预处理语句来达到此目的。

意味着:你将创建一个带有占位符的查询。然后,你可以写这样的事:大约声明

$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; 

检查此链接更多的信息:

https://php.net/manual/de/mysqli-stmt.bind-param.php

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

相关问题