在缺失字段中动态插入 PDO


Dynamic insert PDO in missing fields

我正在使用PDO将数据插入数据库。一切工作都很好,但我有点问题。让我举个例子,

//Perform a basic insert 
$param contains the fields that must be inserted
$this->insert("user", array("id" => $param['id'], "name" => $param['name']));

现在这个插入工作得很好,但假设在缺少字段$nameparam数组中,我会得到通知:

未定义的索引name

如何直接传递要插入的字段?在我的数组中,键表示列名,因此:id, name,值是要插入到数据库中的内容。

这是我的插入方法:

public function insert($table, $data)
{
    $fieldNames = implode("`, `", array_keys($data));         
    $fieldValues = ":" . implode(", :", array_keys($data));  
    $sth = $this->prepare("INSERT INTO $table (`$fieldNames`)
            VALUES ($fieldValues)");
    // Bind sui valori
    foreach($data as $key => $value)
    {
        $sth->bindValue(":$key", $value);
    }
    return $sth->execute();
}

如何只插入我需要的值而不传递所有字段并出错?

您的错误与您正在使用的功能无关。它只与你称呼它的方式有关。

您所需要的只是像这样称呼它:

$this->insert("user", $param);

您现有的代码将妥善处理所有缺失的字段。

请注意,您的代码容易受到 SQL 注入的影响,请参阅最致命的 PDO 代码

尝试使用此代码(字段 - 只是包含要保存的字段名称的数组)

// $param - array with parameters
// $fields - fields which we want to save, e.g. array('id', 'name')
$param = array_filter($param, function($k) use ($fields) {
    return in_arrray($k, $fields);
}, ARRAY_FILTER_USE_KEY);
$this->insert("user", $param);