[英]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.