使用数组更新MySQL

Jun*_*ior 3 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;
?>
Run Code Online (Sandbox Code Playgroud)

我希望用法如下:

<?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);
?>
Run Code Online (Sandbox Code Playgroud)

Hal*_*yon 5

一个查询,带有预处理语句:

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;
}
Run Code Online (Sandbox Code Playgroud)

这确实假设所有值都是字符串.

  • 我删除了这个已接受的答案,因为它是错误的.第一次需要使用正确数量的参数调用`mysqli_stmt :: bind_param()`.你不能在`foreach`循环中添加params(就像在这个例子中一样),因为它会在PHP中生成一个警告. (2认同)