我目前有这个数据
$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。
答案 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;
}
}