简体   繁体   English

将空字符串转换为 null

[英]Converting empty string into null

I have a form that POST value keeps coming as "" empty string into a unique SQL field.我有一个表单,POST 值不断作为 "" 空字符串进入唯一的 SQL 字段。 It has to be unique as the field is optional but jet it can not have 2 same values.它必须是唯一的,因为该字段是可选的,但它不能有 2 个相同的值。 The unique value does allow null multiple values.唯一值确实允许空多个值。 I don't even want to say what I tried to do, I'm trying to fix this for last few days.我什至不想说我试图做什么,我在最近几天试图解决这个问题。 Closest that I got is putting '$OIB'=IF('$OIB'='',NULL,'$OIB' into NSERT INTO statement, then i get null values into a database but for some reason when the number is entered into OIB form field it puts number 1 into a database...我得到的最接近的是将 '$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);

This solution gets me null but not the real $OIB when entered into form, it just puts number 1.这个解决方案让我在输入表单时为空,但不是真正的 $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);

Thank you in advance for the help.预先感谢您的帮助。

尝试

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

You can use also IF Clause您也可以使用 IF 子句

Like so像这样

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

But as mentioned in my comment use prepared statements like in PDO https://phpdelusions.net/pdo#prepared但正如我在评论中提到的,使用 PDO 中的准备好的语句https://phpdelusions.net/pdo#prepared

I would recommend nullif() .我会推荐nullif() It is a built-in standard function to do exactly this:这是一个内置的标准函数,可以做到这一点:

nullif(?, '')

Note: Do not munge queries with constant values.注意:不要使用常量值进行查询。 That makes the code subject to SQL injection attacks.这使得代码容易受到 SQL 注入攻击。 And it can introduce very hard-to-debug errors.它会引入非常难以调试的错误。 Use parameters!使用参数!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM