在缺少的字段中动态插入PDO

San*_*kan -4 php pdo

我正在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)

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

You*_*nse 5

我认为答案是作弊。本身本质上毫无意义,它也无法解决特定的问题。

您的错误与您使用的功能无关。它仅与您的调用方式有关。

所有你需要的就是调用它是这样的:

$this->insert("user", $param);
Run Code Online (Sandbox Code Playgroud)

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

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