我正在使用PDO
将数据插入数据库。一切工作都很好,但我有点问题。让我举个例子,
//Perform a basic insert
$param contains the fields that must be inserted
$this->insert("user", array("id" => $param['id'], "name" => $param['name']));
现在这个插入工作得很好,但假设在缺少字段$name
的param
数组中,我会得到通知:
未定义的索引
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);