2011-08-24 71 views
1

我是从一种形式是这样的如何尝试更新表时忽略NULL值

$value = mysql_real_escape_string($_POST['id']); 
$value1 = mysql_real_escape_string($_POST['name']); 
$value2 = mysql_real_escape_string($_POST['age']); 

获取价值观和我使用这样一个MySQL的语法将信息存储在数据库

$sql = "UPDATE table SET name='$value1',age='$value2' WHERE id ='$value'"; 

我希望上面提到的UPDATE语法只在值不为NULL或不留空时才起作用。

例如,如果名称形式留空白,一些价值被赋予了年龄不是只有年龄应该更新,并没有名字..

我怎样才能做到这一点?

回答

-1

试试这个:

//$value1 = 'joey'; 
$value2 = 123; 

$sql = "UPDATE table SET "; 
$sql .= !empty($value1) ? " name='{$value1}'," : null; 
$sql .= !empty($value2) ? " age='{$value2}'," : null; 
$sql = substr($sql, 0, -1); 
$sql .= " WHERE id ='{$value}'"; 

echo $sql; 

它应该只更新非空的变量。像上面提到的其他人一样逃脱。

+1

这是一个糟糕的编码的例子,它会让那些不得不将代码维持在恶梦中的人的生活和生活变得糟糕。除了许多其他的事情,你至少可以把你想要设置的所有字段放到一个数组中,检查它是否为空,然后使用'implode(',',$ fields)'来避免减少“过多”的昏迷。在需要时扩展会更容易。 – Slava

+0

我同意。我只是简单地展示了一种方法来完成作为一个概念的操作。 –

1

您可以使用empty()来检查值是否为空或空白。

if (!empty($value) && !empty($value1) && !empty($value2)) { 
    // Do query 
} 

你也应该使用isset()保证值使用它们之前就存在检查$ _ POST元素:

if (isset($_POST['id'])) { 
    $value = mysql_real_escape_string($_POST['id']); 
} 
+0

我不明白..你可以举一些例子.. –

+0

empty()如果​​它们不为null,则返回true。 '!empty()'用于检查它是否为空。 – theking963

1

在一个非常基本的水平,你可以检查使用isset非空值。

例如:

if(isset($_POST['id']) && isset($_POST['name']) && isset($_POST['age'])) { 
    // Do the insert... 

} 

不过,我怀疑你可能会想进行一些适当的验证,以确保年龄是有效的,等

(可能通过 if(intval($value2) !== 0)如果是有道理的。)

此外,我会真的建议不允许用户任意更新数据库记录。 (职位是很容易欺骗,用户可以简单地改变形式 'id' 值。)

+1

您必须对_POST值执行isset()。无论_POST数据中有什么,mysql_real_escape_string()都会返回一个空字符串,它使$ value变量被设置。 –

+0

@Marc这是一个非常有效的观点。我会更新我的例子。感谢您的提醒。 :-) –

1
if(isset($_POST['id']) && isset($_POST['name']) && isset($_POST['age'])) 
{ 
    $value = mysql_real_escape_string($_POST['id']); 
    $value1 = mysql_real_escape_string($_POST['name']); 
    $value2 = mysql_real_escape_string($_POST['age']); 

    $sql=" UPDATE table SET name='$value1',age='$value2' WHERE id ='$value'"; 
} 

参见:isset()

+0

更新查询只适用于没有任何值是空的...但我希望上面的工作,即使其中一个窗体被填充,只为该单一值工作(例如,如果名称窗体填充然后更新应该只发生在名称字段中......) –

0
if ((isset($_POST['id']) && ($_POST['id'] !== '')) && 
    (isset($_POST['name']) && ($_POST['name'] !== '')) && 
    (isset($_POST['age']) && ($_POST['age'] !== ''))) { 
    ... everything ok ... do data base stuff 
} else { 
    die("Not correct"); 
} 
+0

UPDATE查询只适用于没有任何值为空的情况下......但我希望上面的工作方式即使其中一个表单被填充并且仅适用于该单一值(例如,如果名称表单被填充,则更新应该只发生在名称字段中......) –