列NOT NULL但脚本仍在创建行

时间:2017-06-10 18:30:54

标签: php mysql sql phpmyadmin

我有一个脚本,用于将数据插入我的数据库。在HTML中我有多个文本框。如果数据输入到文本框中,则我的脚本正在运行INSERT语句。如果文本框中没有输入数据,我的脚本也会运行INSERT语句。

如果文本框中没有输入数据,脚本会在数据库中创建一个空行。我试图通过将列更改为NOT NULL来阻止此操作。

但似乎没有用。

是否有人知道原因以及如何解决?

修改1:

        $sql1 = "SELECT * FROM product WHERE id='" . $id1 . "' AND user_id='" . $_SESSION['USER_ID'] . "'";

        $result1 = $link->query($sql1);
        if ($result1->num_rows > 0) {

            $sql11 = "UPDATE product SET voorraad = quantity -" . $quantity . " WHERE user_id='" . $_SESSION['USER_ID'] . "' AND id='" . $id1 . "'";

            if(mysqli_query($link, $sql11)){

                echo '<p>product1 is updated</p><br />';

            } else {

                echo '<p>error</p>';

            }
        } else {
            $query1 = "INSERT INTO product(user_id, name, price, tax) VALUES (?, ?, ?, ?)";
            $stmt = $db->prepare($query1);
            $exec1 = $stmt->execute(array($_SESSION['USER_ID'], $name1, $price1, $tax1));

            if($exec1){

                echo '<p>product1 is created</p>';  

            } else {
                echo '<p>error</p>';
            }

        }

2 个答案:

答案 0 :(得分:0)

您正在插入空字符串,并且空字符串不为NULL,以检查NULL错误:

INSERT INTO addressesstreetcitystatezip)VALUES(NULL,NULL,NULL,NULL); 你会看到错误。 NOT NULL仅检查非NULL值。

要防止空字符串,您必须使用触发器,或者在执行INSERT查询之前对服务器端编程语言执行检查以将空字符串转换为NULL。 INSERT的示例触发器可能如下:(这只是一个示例)

创建TRIGGER avoid_empty     在插入地址之前         对于每一行         开始         IF street =&#39;&#39;然后设置street = NULL END IF; 结束;

答案 1 :(得分:-1)

如果变量不为null,则可以验证变量并执行查询。为空,否则写值为null,必须传递数据