【问题标题】:php isset and is_null: problems with notset values and null-values in php conditionphp isset 和 is_null:php 条件下的 notset 值和空值问题
【发布时间】:2023-04-11 12:03:01
【问题描述】:

这是为 mysql-query 准备一个字符串。问题是关于NULL。 我只希望“d”列为 NULL(如果在数据数组中设置为 null)。问题是 'isset' 如果为 null 则为假,如果未设置 'is_null' 也为真..

那我该如何解决呢?

我在 php 中有以下内容:

<?
$data = array(
    array('id' => 1, 'c' => '', 'd' => NULL, 'e' => '', 'f' => '', 'i' => 'ciao', 'j' => '', 'k' => ''),
    array('id' => 2, 'b' => '', 'c' => '', 'd' => NULL, 'e' => '', 'f' => 'hello', 'g' => '', 'h' => '', 'i' => ''),
);

$col = array('id', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k');
$insert = $update = array();

foreach (array_values($data) as $key => $val){
    $val_stack = array();
    $insert[$key] = "(";

    foreach ($col as $c){
        if (isset($val[$c]) && is_null($val[$c])) $val_stack[] = 'NULL';
        else if (isset($val[$c])) $val_stack[] = "'".$val[$c]."'";
        else $val_stack[] = "''";
    }

    $insert[$key] .= implode(', ', $val_stack).")";
}

foreach (array_diff($col, array('id')) as $v){
    $update[] = $v == 'd' ? "$v=COALESCE(VALUES($v), $v)" : "$v=VALUES($v)";
}

echo "INSERT INTO table (".implode(', ', $col).") VALUES ".implode(', ', $insert)." ON DUPLICATE KEY UPDATE ".implode(', ', $update);
?>

这个输出:

INSERT INTO table (id, b, c, d, e, f, g, h, i, j, k) VALUES ('1', '', '', '', '', '', '', '', 'ciao', '', ''), ('2', '', '', '', '', 'hello', '', '', '', '', '') 重复键更新 b=VALUES(b), c=值(c),d=合并(值(d),d),e=值(e),f=值(f), g=VALUES(g), h=VALUES(h), i=VALUES(i), j=VALUES(j), k=VALUES(k)

如果我在内部“foreach”(if (/* isset($val[$c]) &amp;&amp; */is_null($val[$c]))) 中评论“isset”,它会输出:

INSERT INTO table (id, b, c, d, e, f, g, h, i, j, k) VALUES ('1', NULL, '', NULL, '', '', NULL, NULL, 'ciao', '', ''), ( '2', '', '', NULL, '', 'hello', '', '', '', NULL, NULL) ON DUPLICATE KEY UPDATE b=值(b),c=值(c),d=合并(值(d),d),e=值(e), f=值(f),g=值(g),h=值(h),i=值(i),j=值(j), k=值(k)

我想要的输出:

INSERT INTO table (id, b, c, d, e, f, g, h, i, j, k) VALUES ('1', '', '', NULL, '', '', '', '', 'ciao', '', ''), ('2', '', '', NULL , '', 'hello', '', '', '', '', '') 重复键更新 b=VALUES(b), c=值(c),d=合并(值(d),d),e=值(e),f=值(f), g=VALUES(g), h=VALUES(h), i=VALUES(i), j=VALUES(j), k=VALUES(k)

【问题讨论】:

    标签: php null isset


    【解决方案1】:

    您可以使用 array_key_exists($c,$val) 代替 isset($val[$c])。它的工作方式非常一致。我用这种方法解决了同样的问题。

    【讨论】:

    • 您很高兴,祝您有美好的一天。
    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2020-10-25
    相关资源
    最近更新 更多