mysql更新查询根据if字段是否自定义

时间:2014-12-16 11:40:09

标签: php mysql

我目前有这个数据

$user=$postData['user_name'];
$phone_no=$postData['phone_no'];

$qry = "UPDATE users SET user_name = '$user', phone_no = '$phone_no' WHERE id = 1"

我想仅在$ postData ['user_name']中存在值时才更新user_name。如果在phone_no中存在相同情况,如果$ phone_no中存在数据,则只应更新phone_no。

2 个答案:

答案 0 :(得分:1)

您必须在细分中构建查询:

$user = $postData['user_name'];
$phone_no = $postData['phone_no'];

$update = array();
if($user) {
    $update[] = "user_name = '$user'";
}

if($phone_no) {
    $update[] = "phone_no = '$phone_no'";
}

if(count($update)) {
    $query = "UPDATE users SET ";
    $query .= implode(",", $update);
    $query .= " WHERE id = 1";
}

答案 1 :(得分:1)

您可以通过破坏可用值来创建动态查询。

以下是使用PDO准备语句的示例:

$db = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');

$user = $postData['user_name'];
$phone_no = $postData['phone_no'];  

$set = $values = array();
if(!empty($user)) {
    $set[] = 'user_name = :user_name';
    $values[':user_name'] = $user;
}

if(!empty($phone_no)) {
    $set[] = 'phone_no = :phone_no';
    $values[':phone_no'] = $phone_no;
}

if(!empty($set)) {
    $set = implode(', ', $set);

    $sql = 'UPDATE users SET ' . $set . ' WHERE id = 1';
    $update = $db->prepare($sql);
    $update->execute($values);
}

如果这些只是两个,上面的方法是可以的,但是如果它有10个字段,你可能需要循环它:

$set = $values = array();
$column_names = array('user_name', 'phone_no', 'id');
foreach($postData as $key => $value) {
    if(!empty($value) && in_array($key, $column_names)) {
        $set[] = "$key = :$key";
        $values[":$key"] = $value;
    }
}