php - 使用数组更新 MySQL

标签 php mysql mysqli

在 PHP 中使用 MySQLi 是否可以在不知道字段名称、字段数量及其值的情况下使用数组更新表。

我已经尝试使用准备好的语句在键和值字段 (?=?) 上插入问号。我在想是否可以在更新查询中使用 () VALUES () 我可能有一个解决方案,但我猜不存在这样的事情。

看看我的脚本:

<?php
    class UserHandler {
        public function updateUserData($array, $id) {
            global $mysqli;
            $stmt = $mysqli->prepare("UPDATE users SET ?=? WHERE id = ?");
            $stmt->bind_param('ssi', $array[0], $array[1], $id);
            $stmt->execute();
            return true;
        }
    }

    $users = new UserHandler;
?>

我希望用法是这样的:

<?php
    $users->updateUserData(array(
        'firstname' => 'Wanda',
        'lastname' => 'Merritt',
        'state' => 'IN'
        'address' => '693 Pearcy Avenue',
        'zipcode' => 46625,
    ), 45);

    $users->updateUserData(array(
        'firstname' => 'Stanley',
        'lastname' => 'Lewis',
        'password' => '123123'
    ), 159);
?>

最佳答案

一个查询,带有准备好的语句:

public function updateUserData($array, $id) {
    global $mysqli;
    $query = "UPDATE `users` SET ";
    $parts = array();
    foreach ($array as $key => $value) {
        $parts[] = "`" . $key . "` = ?";
    }
    $query = $query . implode(",", $parts) . " WHERE id = ?";

    $stmt = $mysqli->prepare($query);

    foreach ($array as $key => $value) {
        $stmt->bind_param('s', $value);
    }
    $stmt->bind_param('i', $id);
    $stmt->execute();
    return true;
}

这确实假定所有值都是字符串。

关于php - 使用数组更新 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19157510/

相关文章:

php - 第一个查询返回的第二个查询的结果

mysql - 点餐系统——数据库设计

php - mysql 在 MAX -n1 和 MAX-n2 之间选择

php - 如何使用PHP上传多个文件

php - 将列结果存储在变量中

php - 为搜索功能创建 MySql 查询

mysql - 在具有自连接关系的mysql表中进行选择

php - 如何在 Codeigniter 中实例化同一对象的多个实例?

php - 子表达式(正则表达式)的无限匹配仅返回一个匹配项

c# - C# MySQL 备份数据库