【问题标题】:Converting empty string into null将空字符串转换为null
【发布时间】:2020-02-08 23:58:08
【问题描述】:

我有一个表单,POST 值一直作为“”空字符串进入一个唯一的 SQL 字段。 它必须是唯一的,因为该字段是可选的,但 jet 它不能有 2 个相同的值。唯一值确实允许空多个值。 我什至不想说我试图做什么,我在过去几天试图解决这个问题。 我得到的最接近的是将 '$OIB'=IF('$OIB'='',NULL,'$OIB' 放入 NSERT INTO 语句中,然后我将空值输入数据库,但由于某种原因,当输入数字时OIB 表单字段将数字 1 放入数据库...

$result = mysqli_query($conn, "SELECT OIB, NAZIV FROM STRANKEP WHERE OIB = '$OIB' OR NAZIV = '$NAZIV'");

if(mysqli_num_rows($result) == 0) {
     // row not found, do stuff...
     $sql = "INSERT INTO STRANKEP (NAZIV, OIB, EMAIL, ADRESA, TELEFON) VALUES ('$NAZIV', CASE WHEN '$OIB' = '' THEN 'NULL', '$EMAIL', '$ADRESA', '$TELEFON')";
    $query = mysqli_query($conn, $sql);

这个解决方案在输入表单时让我为空,但不是真正的 $OIB,它只是输入数字 1。

$result = mysqli_query($conn, "SELECT OIB, NAZIV FROM STRANKEP WHERE OIB = '$OIB' OR NAZIV = '$NAZIV'");

if(mysqli_num_rows($result) == 0) {
     // row not found, do stuff...
     $sql = "INSERT INTO STRANKEP (NAZIV, OIB, EMAIL, ADRESA, TELEFON) VALUES ('$NAZIV', '$OIB'=IF('$OIB'='',NULL,'$OIB'), '$EMAIL', '$ADRESA', '$TELEFON')";
    $query = mysqli_query($conn, $sql);

提前感谢您的帮助。

【问题讨论】:

  • 不使用准备好的语句是完全不可接受的编码。
  • 我是菜鸟,对不起,这也仅适用于本地网络,很少有人使用数据库。但我会做出改变。
  • 为什么不检查这些值并将它们转换为NULL

标签: mysql sql null


【解决方案1】:

试试

CASE '$OIB' WHEN '' THEN NULL ELSE '$OIB' END

【讨论】:

    【解决方案2】:

    你也可以使用 IF 子句

    像这样

    INSERT INTO STRANKEP (NAZIV, OIB, EMAIL, ADRESA, TELEFON) VALUES 
    ('$NAZIV', IF('$OIB' = '', NULL,'$OIB'), '$EMAIL', '$ADRESA', '$TELEFON');
    

    但正如我在评论中提到的,使用 PDO https://phpdelusions.net/pdo#prepared 中的准备好的语句

    【讨论】:

    • 试过了,它将NULL存储为文本而不是真正的null。
    • 我编辑了我的答案,只删除了 NULL 周围的勾号
    【解决方案3】:

    我会推荐nullif()。它是一个内置的标准函数,可以做到这一点:

    nullif(?, '')
    

    注意:不要使用常量值处理查询。这使得代码受到 SQL 注入攻击。它可能会引入非常难以调试的错误。使用参数!

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多