phppdo使用if更新变量字段

xmjla07d  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(358)

我有一个函数可以更新mysql表中最多3个字段。该函数可以接收所有3个要更新的字段,也可以只接收1或2个
现在我这样做是为了构造mysql语句。

if ($foo1){
   $mysql_set = '`foo1` = :foo1';}
if ($foo2){
   if ($mysql_set){$mysql_set .= ', ';}
   $mysql_set .= '`foo2` = :foo2';}
if ($foo3){
   if ($mysql_set){$mysql_set .= ', ';}
   $mysql_set .= '`foo3` = :foo3';}

$update = $db->prepare("UPDATE `bar` SET $mysql_set WHERE `id` = :id");

if ($foo1){
   $update->bindValue(':foo1', $foo1, PDO::PARAM_STR);}
if ($foo2){
   $update->bindValue(':foo2', $foo2, PDO::PARAM_STR);}
if ($foo3){
   $update->bindValue(':foo3', $foo3, PDO::PARAM_STR);}
$update->bindValue(':id', $id, PDO::PARAM_INT);
$update->execute();

如您所见,我重复了两次“if($foo1-$foo3){}”来构造这个mysql查询。这看起来是多余的,不知道是否有更好的方法来处理这种情况。

q9yhzks0

q9yhzks01#

尝试。

if ($foo1){
       $mysql_set = '`foo1` = :foo1';
       $update = prepareStmt($db, $mysql_set);
       $update->bindValue(':foo1', $foo1, PDO::PARAM_STR);
    }
    if ($foo2){
       if ($mysql_set){$mysql_set .= ', ';}
       $mysql_set .= '`foo2` = :foo2';
    $update = prepareStmt($db, $mysql_set);
    $update->bindValue(':foo2', $foo2, PDO::PARAM_STR);
    }
    if ($foo3){
       if ($mysql_set){$mysql_set .= ', ';}
       $mysql_set .= '`foo3` = :foo3';
    $update = prepareStmt($db, $mysql_set);
    $update->bindValue(':foo3', $foo3, PDO::PARAM_STR);
    }

    $update->bindValue(':id', $id, PDO::PARAM_INT);
    $update->execute();

    function prepareStmt($db,$mysql_set){
        return $db->prepare("UPDATE `bar` SET $mysql_set WHERE `id` = :id");
    }
wljmcqd8

wljmcqd82#

可以将关联数组指定给 execute() ,而不是打电话 bindValue() 对每个参数分别进行。

$param_array = array(':id' => $id);
$set_array = array();
if ($foo1) {
    $param_array[':foo1'] = $foo1;
    $set_array[] = "foo1 = :foo1";
}
if ($foo2) {
    $param_array[':foo2'] = $foo2;
    $set_array[] = "foo2 = :foo2";
}
if ($foo3) {
    $param_array[':foo3'] = $foo3;
    $set_array[] = "foo3 = :foo3";
}
if (!empty($set_array)) {
    $set_string = implode(", ", $set_array);
    $sql = "UPDATE bar SET $set_string WHERE id = :id";
    $update = $db->prepare($sql);
    $update->execute($param_array);
}

相关问题