Php 如何用更短的方式编写大量类似的if语句?

Php 如何用更短的方式编写大量类似的if语句?,php,mysql,if-statement,Php,Mysql,If Statement,有没有办法把这些if语句写得更短 if($data==name){ $sql1 = "UPDATE people set firstname = ? WHERE id = '$id'"; $q = $pdo->prepare($sql1); $q->execute(array($name)); } if($data==age){ $sql2 = "UPDATE people set age = ? WHERE id = '$id'"; $q =

有没有办法把这些if语句写得更短

if($data==name){
    $sql1 = "UPDATE people set firstname = ? WHERE id = '$id'";
    $q = $pdo->prepare($sql1);
    $q->execute(array($name));
}
if($data==age){
    $sql2 = "UPDATE people set age = ? WHERE id = '$id'";
    $q = $pdo->prepare($sql2);
    $q->execute(array($age));
}
if($data==color1){
    $sql3 = "UPDATE people set paint1 = ? WHERE id = '$id'";
    $q = $pdo->prepare($sql3);
    $q->execute(array($color));
}
if($data==color2){
    $sql4 = "UPDATE people set paint2 = ? WHERE id = '$id'";
    $q = $pdo->prepare($sql4);
    $q->execute(array($color));
}
if($data==color3){
    $sql5 = "UPDATE people set paint3 = ? WHERE id = '$id'";
    $q = $pdo->prepare($sql5);
    $q->execute(array($color));
}
我试着做一个函数

function data($info, $information, $name){
        if($data==$info){
             $sql = "UPDATE people set $information = ? WHERE id = '$id'";
             $q = $pdo->prepare($sql);
             $q->execute(array($name));
        }
}

data(name, firstname, $name);

但它不是这样工作的,我没有得到一个结果。可能是因为sql请求中的变量?

Php开关,来自文档:

if ($i == 0) {
    echo "i equals 0";
} elseif ($i == 1) {
    echo "i equals 1";
} elseif ($i == 2) {
    echo "i equals 2";
}
// same as
switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}

应该是你要找的

Php开关,来自文档:

if ($i == 0) {
    echo "i equals 0";
} elseif ($i == 1) {
    echo "i equals 1";
} elseif ($i == 2) {
    echo "i equals 2";
}
// same as
switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}

应该是你要找的

尝试使用
if-elseif
,因为如果对每一个使用
if
语句,则需要很长时间。所以当第一个条件为true时,意味着不需要检查另一个if条件,所以使用
if-elseif
语句。或使用开关盒

        if($data==name){
            $sql1 = "UPDATE people set firstname = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql1);
            $q->execute(array($name));
        }
        else if($data==age){
            $sql2 = "UPDATE people set age = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql2);
            $q->execute(array($age));
        }
        else if($data==color1){
            $sql3 = "UPDATE people set paint1 = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql3);
            $q->execute(array($color));
        }
        else if($data==color2){
            $sql4 = "UPDATE people set paint2 = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql4);
            $q->execute(array($color));
        }
        else if($data==color3){
            $sql5 = "UPDATE people set paint3 = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql5);
            $q->execute(array($color));
        }
        else
        {

          echo "nothing";
        }


      (OR)


        switch ($data) {
            case name:
                $sql1 = "UPDATE people set firstname = ? WHERE id = '$id'";
                $q = $pdo->prepare($sql1);
                $q->execute(array($name));
                break;
            case age:
               $sql2 = "UPDATE people set age = ? WHERE id = '$id'";
               $q = $pdo->prepare($sql2);
               $q->execute(array($age));
                break;
            case color1:
                $sql3 = "UPDATE people set paint1 = ? WHERE id = '$id'";
                $q = $pdo->prepare($sql3);
                $q->execute(array($color));
                break;
            case color2:
                $sql4 = "UPDATE people set paint2 = ? WHERE id = '$id'";
               $q = $pdo->prepare($sql4);
               $q->execute(array($color));
                break;  
            case color3:
                $sql5 = "UPDATE people set paint3 = ? WHERE id = '$id'";
               $q = $pdo->prepare($sql5);
              $q->execute(array($color));
                break;  
        }

尝试使用
if-elseif
,因为如果对每个语句使用
if
语句,则需要很长时间。所以当第一个条件为true时,意味着不需要检查另一个if条件,所以使用
if-elseif
语句。或使用开关盒

        if($data==name){
            $sql1 = "UPDATE people set firstname = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql1);
            $q->execute(array($name));
        }
        else if($data==age){
            $sql2 = "UPDATE people set age = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql2);
            $q->execute(array($age));
        }
        else if($data==color1){
            $sql3 = "UPDATE people set paint1 = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql3);
            $q->execute(array($color));
        }
        else if($data==color2){
            $sql4 = "UPDATE people set paint2 = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql4);
            $q->execute(array($color));
        }
        else if($data==color3){
            $sql5 = "UPDATE people set paint3 = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql5);
            $q->execute(array($color));
        }
        else
        {

          echo "nothing";
        }


      (OR)


        switch ($data) {
            case name:
                $sql1 = "UPDATE people set firstname = ? WHERE id = '$id'";
                $q = $pdo->prepare($sql1);
                $q->execute(array($name));
                break;
            case age:
               $sql2 = "UPDATE people set age = ? WHERE id = '$id'";
               $q = $pdo->prepare($sql2);
               $q->execute(array($age));
                break;
            case color1:
                $sql3 = "UPDATE people set paint1 = ? WHERE id = '$id'";
                $q = $pdo->prepare($sql3);
                $q->execute(array($color));
                break;
            case color2:
                $sql4 = "UPDATE people set paint2 = ? WHERE id = '$id'";
               $q = $pdo->prepare($sql4);
               $q->execute(array($color));
                break;  
            case color3:
                $sql5 = "UPDATE people set paint3 = ? WHERE id = '$id'";
               $q = $pdo->prepare($sql5);
              $q->execute(array($color));
                break;  
        }

我认为您正在寻找切换:如果
elseif
比您当前的代码更有效,那么
切换
更易于阅读和遵循。在您的函数中,
$data
是什么?动态SQL是一种方法,添加列名作为变量您的函数应该可以工作。似乎未声明
$id
,也未声明
$data
我想您正在寻找切换:如果
其他切换
比您当前的代码效率更高,则
切换
更易于阅读和遵循。在您的函数中,
$data
是什么?动态SQL是一种方法,将列名作为变量添加到函数中。似乎未声明
$id
,也未声明
$data