【问题标题】:How do I dynamically insert NULL into a postgres table?如何将 NULL 动态插入到 postgres 表中?
【发布时间】:2012-05-12 04:33:47
【问题描述】:

我有一张这样的桌子

CREATE TABLE test(a int, b int);

表格的值是从动态输入中插入的

$a, $b(PHP 变量)

$query = "UPDATE test set a=$a where b = $b";
pg_query($db, $query);

这在 $a 为空时不起作用(即当用户没有为表格中的表单字段输入任何值时)。我该如何解决这个问题?

【问题讨论】:

  • 你试过set a='$a'吗?如果 $a 为空,它将尝试插入一个空值。如果您的表接受空值,它应该可以工作。
  • @FabrícioMatté: NULLempty '' 是非常不同的值。
  • 哦,我明白了。我已经有一段时间没有使用 PgSQL 了,所以请原谅我的无知。我的意思是,当在 php 中获取时,如果将其与 if (!$value) 进行比较,两者都会被解析为 false。

标签: php database postgresql null


【解决方案1】:

测试$a是否为空,如果为空,则设置为null:

$a = ($a == '') ? 'NULL' : "'$a'";
$query = "UPDATE test set a=$a where b='$b'";

不要忘记引用 $b 值,在我引用它之前它会在此处返回错误。

如果$a 不为空,我在上面的检查中添加了引号,因此现在如果 $a 为 NULL(空)、整数或字符串,它将起作用。

【讨论】:

  • 在 postgres 中 a='' 抛出错误。我必须将其显式设置为 $a= null 但我不知道如何动态传递 null。我可以用引号传递“null”,但不仅仅是 null。
  • 我编辑了我的答案。我会在我的 PG 服务器上设置一个表来测试它。
  • 我已经编辑完成了,试试看。 NULL 不应被引用,否则它将作为文字字符串插入,因此我在上面的检查中为 $a 添加了引号,当它不为空时。
  • 我刚刚在第一篇文章中用你的 SQL 生成的表中做了一个UPDATE test set a=NULL where b='2',它工作得很好。确保您的字段接受空值。此外,您可以尝试在$query 行之后放置die($query);,以确保它看起来像我刚刚在此评论中发布的那个。也许我只是太困了,没有注意到一些非常明显的东西..
  • NULL 不应顺便引用。在我的回答中声明 $a$query 不应该。
【解决方案2】:

如果 $a 为空,$query 将如下所示:

UPDATE test SET a= where b = whatever

您需要在查询字符串中显式添加NULL

UPDATE test SET a=NULL where b = whatever

【讨论】:

    猜你喜欢
    • 2019-12-03
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多