我正在PDO用于将数据插入数据库。一切工作都还不错,但是我有点问题。让我以你为例
//Perform a basic insert
$param contains the fields that must be inserted
$this->insert("user", array("id" => $param['id'], "name" => $param['name']));
Run Code Online (Sandbox Code Playgroud)
现在,此插入可以正常工作,但是假设在param缺少字段的数组中,$name我会得到通知:
未定义索引
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();
}
Run Code Online (Sandbox Code Playgroud)
如何仅插入所需的值而不传递所有字段并出错?
我认为答案是作弊。本身本质上毫无意义,它也无法解决特定的问题。
您的错误与您使用的功能无关。它仅与您的调用方式有关。
所有你需要的就是调用它是这样的:
$this->insert("user", $param);
Run Code Online (Sandbox Code Playgroud)
您现有的代码将妥善处理所有缺少的字段。
请注意,您的代码容易受到SQL注入的攻击,请参阅最致命的PDO代码