在插入数据库之前,检查数组中是否存在value


Check if value exists in array before inserting into database

我有一个从API返回的数组,尽管一些键/值并不总是存在。

例子数组

Array
(
    [example0] => data
    [example1] => data
    [example2] => data
    [example3] => data
)

现在如果我使用如下的查询

$dbh = $this->database->prepare("INSERT INTO table(example0, example1, example2, example3)VALUES(:example0, :example1, :example2, :example3)");
    $dbh->execute(array(
        "example0" => $data['example0'],
        "example1" => $data['example1'],
        "example2" => $data['example2'],
        "example3" => $data['example3']
    ));

它会工作的很好。但是当API返回像

这样的数组时
Array
(
    [example0] => data
    [example1] => data
    [example3] => data
)

它将导致一个错误,由于一个值没有被设置,有没有一种方法,只是让它不输入到列,而不是抛出一个错误?我使用了一个非常大的查询,所以为每个值写一个if/else不是一个好主意(在我看来,对于性能而言)

您必须检查键是否设置并且最终是否存在值:

if(isset($array['your_key']) && !empty($array['your_key'])) { } 

我不能从你的代码中弄清楚,但是在你在查询中使用它之前验证一切。

[编辑]示例:

$keys = array('example1', 'example2', 'example3', 'example4');
$use_in_query = array();
foreach($keys as $key)
{
    if(isset($array[$key]) && !empty($array[$key])) $use_in_query[$key] = $array[$key];
}
Now you can use the $use_in_query var in your query.
$dbh->execute($use_in_query);
(/编辑)