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
调用的数量。但事实并非如此。啊,现在我明白了,我以为他想在一次通话中更新不同的字段。在这种情况下,你是对的。避免某样东西并不意味着得到另一些东西的两倍。无论如何,非常感谢你的努力。