PHP:为可用的$\u POST变量创建SQL查询

PHP:为可用的$\u POST变量创建SQL查询,php,mysql,post,Php,Mysql,Post,我有一个$u POST变量: Array ( [phone_1] => 3123213 [phone_2] => 432423 [phone_3] => 4234 [phone_4] => 6456456 [phone_5] => 7567576 [phone_6] => ) 现在我有了这个SQL语句: UPDATE table_name SET phone_1 = $_POST['phone1'], pho

我有一个$u POST变量:

Array
(
    [phone_1] => 3123213
    [phone_2] => 432423
    [phone_3] => 4234
    [phone_4] => 6456456
    [phone_5] => 7567576
    [phone_6] => 
)
现在我有了这个SQL语句:

UPDATE table_name SET phone_1 = $_POST['phone1'],
phone_2 = $_POST['phone2'], 
phone_3 = $_POST['phone3'], 
phone_4 = $_POST['phone4'], 
phone_5 = $_POST['phone5'], 
phone_6 = $_POST['phone6'] 
WHERE id=$id
我想要实现的是基于$\u POST变量动态构建SQL查询,并且只包含那些具有POST值的查询。因此,SQL语句应该是:

UPDATE table_name SET phone_1 = $_POST['phone1'],
    phone_2 = $_POST['phone2'], 
    phone_3 = $_POST['phone3'], 
    phone_4 = $_POST['phone4'], 
    phone_5 = $_POST['phone5']
因为phone_6 post变量为空。是的,$\u POST键名称与表字段名称相同。蒂亚

您可以使用:

<?php
$update = "";
foreach($_POST as $key => $value) {
   if(!empty($value)) {
     $update .= $key. "='".$value."',";
   }
}
$update = substr($update,0,-1);
$query = "UPDATE table_name SET ".$update." WHERE id=$id";

?>

通过使用
内爆
数组映射

您可以使用foreach语句循环$\u POST。遗憾的是,这不符合描述,尝试过后,它仍然在SQL语句中包含空的$\u POST变量-这是一种不错的方法,因为它没有使用循环。使用数组过滤器避免空值,请检查我的编辑。。
$postVar    = array_filter($_POST);
$update     = implode(', ', array_map(function($v, $k) { return $k."='".$v."'"; }, $postVar, array_keys($postVar)));
$query      = "UPDATE table_name SET ".$update." WHERE id=$id";