如何在sql UPDATE语句中使用IF条件?

时间:2014-05-09 14:30:10

标签: php mysql sql

 <?php
session_start();
include('config.php');

$id = $_SESSION['USER_ID'];

$sql = "UPDATE user ";

if($_POST["fname"]!=""){
$sql .="set FIRST_NAME='".$_POST["fname"]."',";
}

if($_POST["lname"]!=""){
$sql .="set LAST_NAME='".$_POST["lname"]."',";
}

if($_POST["email"]!=""){
$sql .="set EMAIL='".$_POST["email"]."',";
}

$sql .="where USER_ID=".$id ;




$result = mysql_query($sql);

    if($result=='1'){
        ?>
        <script type="text/javascript">
            alert('Details successfully changed!');


        </script>

        <?php
   }else{
        ?>
        <script type="text/javascript">
           alert('Error : Data editing');

        </script>

    <?php
    }

以上是我用来编辑用户表中的详细信息的代码。我确实想检查已填充的字段然后将其更新到数据库中,但这不起作用,当我回显这个$ sql时它显示了这个。

UPDATE user set FIRST_NAME='test',set LAST_NAME='one',set EMAIL='test@gmail.com',where USER_ID=4

那么我的代码错误是什么?

2 个答案:

答案 0 :(得分:0)

你的SQL语法错了......

完整语法为:UPDATE user set FIRST_NAME='value', set LAST_NAME='value', set EMAIL='value', where USER_ID=<id>

但是在最后一组之后你可能没有逗号。所以你的正确语法应该是:UPDATE user set FIRST_NAME='value', set LAST_NAME='value', set EMAIL='value' where USER_ID=<id>

通过使用if语句,您必须在if条件中添加逗号。但是第一个和最后一个名字是空的,在这种情况下你可能不会。

一个选项可以是创建一个数组,并使用implode。 例如,通过使用插入,您可以执行此操作:

<?php

    // array containing data
    $array = array(
       "name" => "John",
       "surname" => "Doe",
       "email" => "j.doe@intelligence.gov"
    );

    // build query...
    $sql  = "INSERT INTO table";

    // implode keys of $array...
    $sql .= " (`".implode("`, `", array_keys($array))."`)";

    // implode values of $array...
    $sql .= " VALUES ('".implode("', '", $array)."') ";

    // execute query...
    $result = mysql_query($sql) or die(mysql_error());

?> 

****编辑 其他方式是:

$array = array();

if($_POST["firstname"] != "")
{
   $array["FIRST_NAME"] = "value";
}

if($_POST["lastname"] != "")
{
   $array["LAST_NAME"] = "value";
}

if($_POST["email"] != "")
{
   $array["EMAIL"] = "value";
}

$query = "UPDATE user SET ";
$counter = 0;
foreach($array as $key => $value)
{
   if($counter != 0 && $counter < count($array))
       $query .= ",";
   $query .= $key . "=" . $value;
}

答案 1 :(得分:0)

SQL中的问题是多个'SET'语句。

你可以使用类似的东西。

一个数组,用于设置您的值,然后您可以将其分解为“,”

$id = $_SESSION['USER_ID'];

$setStatement = array();
if($_POST["fname"] != "") { array_push($setStatement, "FIRST_NAME = '".$_POST["fname"]."'"); }
if($_POST["lname"] != "") { array_push($setStatement, "LAST_NAME = '".$_POST["lname"]."'"); }
if($_POST["email"] != "") { array_push($setStatement, "EMAIL = '".$_POST["email"]."'"); }

if(!empty($setStatement)) {
    $sql = "UPDATE user SET " . implode($setStatement, ", ") . " WHERE USER_ID=". $id;
    //print $sql;
    $result = mysql_query($sql);
}