PHP动态MySQL查询

时间:2017-07-18 09:39:40

标签: php mysql

大家好,因为标题声明我正在寻找一种方法来对我的MySQL服务器进行动态查询。目前这是我用来更新服务器上数据的代码:

$deskAttr = json_decode($_POST["desk_attributes"]);

foreach($deskAttr as $key => $value) {
    $sql = "UPDATE desk_attributes SET iw_standard=".$value->iw_standard.", avaya_standard=".$value->avaya_standard.", avaya_withcallid=".$value->avaya_withcallid.", avaya_withtransfer=".$value->avaya_withtransfer.", dual_screen=".$value->dual_screen.", air_conditioning=".$value->air_conditioning.", iw_obdialler=".$value->iw_obdialler." WHERE id=".$value->id;
    $conn->query($sql);
}

如您所见,SQL列名称与deskAttr键相同。我正在寻找一种方法来使这一行成为一个循环,这样如果我要向MySQL表中添加更多列,我就不需要更改这一行。

它看起来像这样:

$deskAttr = json_decode($_POST["desk_attributes"]);

foreach($deskAttr as $key => $value) {  
    $sql = "UPDATE desk_attributes SET";
    foreach($value as $k => $v) {
        $sql .= " $k = $value->$k ,";
    }
    $sql .= "WHERE id=".$value->id";
}

我如何编写上面的代码以便实际工作? 感谢。

<小时/> 的修改

知道$deskAttr是一个对象数组并且列的名称与对象键的名称相同可能会有所帮助。

这就是我在伪代码中的意思:

foreach($object in $deskAttr) {
    $sql = "UPDATE table SET ";
    foreach($key in $object) {
        if($key != "id")
            $sql .= "$key = $object->$key, ";
    }
    $sql .= "WHERE id = $object->id;
    $conn->query($sql);
}

显然,这会在WHERE部分之前的查询末尾添加一个额外的逗号,但希望你能得到我想要实现的目标。

1 个答案:

答案 0 :(得分:1)

您可以使用PHP的implode()函数轻微更改代码。

取一个空白数组,将更新参数连接到它。

然后,如果不是empty()implode()来获取字符串。

更新代码:

$sql = "UPDATE desk_attributes SET ";
foreach ($deskAttr as $key => $value) {
 $value = mysqli_real_escape_string($link, $value); // $links is database connection string.
 $key = mysqli_real_escape_string($link, $key); // $links is database connection string.
 $updtAttrs[] = $key ." = '" . $value . "'";
}
$sql .= ! empty($updtAttrs) ? implode(', ', $updtAttrs) : '';
$sql .= " WHERE id=" . $value->id;