【问题标题】:Execute PDO prepared statement with an array containing null values使用包含空值的数组执行 PDO 准备语句
【发布时间】:2011-11-01 13:09:45
【问题描述】:

我目前有一个数组,其中包含要使用 PDO 插入数据库的表单中的值。

有些值是可选字段,因此有时会被填充,而NULL 其他的。

我要插入的表格大约有 50 行长,我正在使用以下内容:

$sth = Database::get()->prepare("INSERT INTO $this->_insertTbl
                                 (field1, field2, field3)
                                 VALUES
                                 (:field1, :field2, :field3)");
$sth->execute($dataArr);

$dataArr 有时可以包含空值,例如:

Array
(
    [field1] => 44
    [field2] => NULL
    [field3] => Jammin
}

其他时候不是:

Array
(
    [field1] => 44
    [field2] => Harry
    [field3] => William
}

这通常适用于完全填充的变量以及空字符串,但似乎不适用于某些 NULL 值。

通常,据我了解,您会使用bindValue 而不是bindParam,但是当我使用数组执行语句时,有什么办法可以解决这个问题,还是我需要单独列出每个?

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    NULL 在我的经验中不适用于绑定参数。如果值为NULL,则跳过赋值。

    我之前也用空字符串替换了NULL...

    $params = array_map(function($param) {
        return is_null($param) ? '' : $param;
    }, $params);
    

    CodePad.

    (假设您有幸达到 >= PHP 5.3。)

    更新

    将您的列名和值转换为一个数组,并使用join() 将它们连接起来。

    这使您可以在需要时轻松构建某些成员。

    【讨论】:

    • 如何跳过绑定值?我目前有在:value 表单中列出行以及值的语句
    • @lethal 很大程度上取决于您如何编写 SQL。只需跳过 INSERT 中的分配(通过跳过 column="abc" 或不在括号内的第一组中列出它。
    • 我遇到的问题是,例如在我的数据库中使用address2,有时它会为 NULL,而其他的则会被填充。因此,据我所知,它需要被绑定?
    • @lethalMango 如果你不填充它,它会在数据库中保持为 NULL 不是吗?
    • 我已使用示例数组和查询格式更新了我的原始问题。如果您可以参考我的更新来解释您的解决方案,那就太好了:)
    猜你喜欢
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2010-11-18
    • 2016-12-30
    相关资源
    最近更新 更多