尝试更新表时如何省略NULL值

时间:2011-08-24 20:26:35

标签: php sql

我从像这样的表单中获取值

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

我正在使用这样的mysql语法在DB

中存储信息
$sql = "UPDATE table SET name='$value1',age='$value2' WHERE id ='$value'";

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

例如,如果名称表格留空并且已为年龄提供了一些值,则应仅更新年龄而不是名称..

我该怎么做?

5 个答案:

答案 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']);
}

答案 1 :(得分:1)

在最基本的级别,您可以使用isset检查非空值。

例如:

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

}

但是,我怀疑你可能想要进行一些适当的验证以确保年龄有效等等(如果有意义的话,也许可以通过if(intval($value2) !== 0)。)

另外,我确实建议不允许用户随意更新数据库记录。 (POST非常容易欺骗,用户可以简单地更改表单'id'值。)

答案 2 :(得分: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()

答案 3 :(得分: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");
}

答案 4 :(得分:-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;

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