Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在不进行多次更新的情况下通过数组更新整个列_Php_Mysql - Fatal编程技术网

Php 如何在不进行多次更新的情况下通过数组更新整个列

Php 如何在不进行多次更新的情况下通过数组更新整个列,php,mysql,Php,Mysql,我有一个数组,希望通过它的元素更新整个列 $arr = explode(',', $items); foreach ($arr as $el){ $i = array_search($el, $arr) + 1; $sql = "update bplus set uname = '" . $el . "' where id = " . $i; $st = $db->query($sql); } 这是可行的,但是有没有办法避免多个update语句呢?我的一段代码

我有一个数组,希望通过它的元素更新整个列

$arr = explode(',', $items);

foreach ($arr as  $el){
    $i = array_search($el, $arr) + 1;
    $sql = "update bplus set uname = '" . $el . "' where id = " . $i;
    $st = $db->query($sql);
}

这是可行的,但是有没有办法避免多个
update
语句呢?

我的一段代码就是针对这个问题准备的语句。它为->prepare()创建语句,并为->bind_param()创建参数列表。 运算符从数组('var1'=>3,'var2'=>4)$var1,$var2组成

    $sql = 'UPDATE bplus SET ';

    foreach($data as $k=>$v) {
        if (gettype($v) == 'string') {
            $params_type .= 's';
        } else {
            $params_type .= 'i';
        }
        $params[] = $v;
        $sql .= $k . '=?,';
    }
    $sql = rtrim($sql, ',');
    $sql .= ' WHERE id=?';
    $params[] = $id;
    $params_type .= 'i';
    $stmt = $this->dbObject->prepare($sql);
    if($stmt === false) {
      echo 'Error: ' . $this->dbObject->errno . ' ' . $this->dbObject->error;
    }
    $stmt->bind_param($params_type, ...$params);
    $result = $stmt->execute();

这是与mysqli一起使用的吗?您可以构造一个大的
$sql
,然后在其上运行。这可能对性能更好。我不确定您是否可以避免使用多条更新语句,因为
el
id
每次更新多条信息时都会更改循环。除非您看到明显的性能问题。尝试“一体机”的问题在于,通常如果一个失败,它们都会被回滚。这并不能解决OP的问题,虽然准备好的语句有助于清理用户输入,但OP希望减少
update
调用的数量。但事实并非如此。啊,现在我明白了,我以为他想在一次通话中更新不同的字段。在这种情况下,你是对的。避免某样东西并不意味着得到另一些东西的两倍。无论如何,非常感谢你的努力。