使用准备好的PHP MYSQL语句向数据库插入空值

使用准备好的PHP MYSQL语句向数据库插入空值,php,mysql,mysqli,prepared-statement,bindparam,Php,Mysql,Mysqli,Prepared Statement,Bindparam,嗨,我第一次使用准备好的语句。我有一个表单,它的值,我使用Mysqli准备的语句插入Mysql数据库。但问题是,如果用户将输入框留空,则查询不会将行插入数据库 形式 然后它就会起作用,其中大多数都是被接受的答案。我很困惑为什么这个解决方案对我不起作用 非常感谢您的帮助…谢谢您的查询有误: if ($stmt = $mysqli->prepare("INSERT INTO login VALUES('',?,?,?,?,?,'')")) { 应该是这样的: if (!empty($name

嗨,我第一次使用准备好的语句。我有一个表单,它的值,我使用Mysqli准备的语句插入Mysql数据库。但问题是,如果用户将输入框留空,则查询不会将行插入数据库

形式

然后它就会起作用,其中大多数都是被接受的答案。我很困惑为什么这个解决方案对我不起作用

非常感谢您的帮助…谢谢您的查询有误:

if ($stmt = $mysqli->prepare("INSERT INTO login VALUES('',?,?,?,?,?,'')")) {
应该是这样的:

if (!empty($name) || !empty($pass) || !empty($email))
    {
        $stmt = $mysqli->prepare("INSERT INTO login(`name`,`password`,`email`,`sex`,`city`) VALUES(?,?,?,?,?)");
        $stmt->execute([$name, $pass, $email, $sex, $city]);
        echo "result inserted";

    } else {
        echo 'You have not entered all of the fields.';
    }
在本例中,如果变量不是空的,则执行insert。否则,如果它们是空的,则会发出回声,说明字段尚未填充


如果您很高兴字段为空,只需更改!从空到空,但正如上面Fred-ii所述,确保您的数据库在字段中允许NULL。

这可能不是最聪明的方法之一,但是,嘿,这将完成任务

在将变量分配给$\u POST字段之前,需要做的一件事是,检查该$\u POST字段是否已设置且不为空,然后分配值(如果不为空),当前,如果在运行查询时有人遗漏了表单中的某个字段,则可能会收到未定义的通知

这就是你能做的

<?php

if (isset($_POST['submit'])) {
    include_once('includes/db.php');


    if (!empty($_POST['name'])) {

        $name = $_POST['name'];
    } else {

        $name = " ";
    }

    if (!empty($_POST['pass'])) {

        $pass = $_POST['pass'];
    } else {

        $pass = " ";
    }

    if (!empty($_POST['email'])) {

        $email = $_POST['email'];
    } else {

        $email = " ";
    }

    if (isset($_POST['sex'])) {

        $sex = $_POST['sex'];
    } else {

        $sex = " ";
    }

    if (!empty($_POST['city'])) {
        $city = $_POST['city'];
    } else {

        $city = " ";
    }
    if ($stmt = $mysqli->prepare("INSERT INTO login VALUES(?,?,?,?,?)")) {
        $stmt->bind_param("sssss", $name, $email, $pass, $sex, $city);
        $stmt->execute();
        if ($stmt) {
            echo "result inserted";
        } else {

            echo "could not insert";
        }
    }
}

?>

还有其他更好的方法可以做到这一点。

确保数据库可以有空值。使用具有默认值的三元运算符;做这件事的方法太多了--永远不要存储纯文本密码!请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用密码\u散列。在散列之前,请确保对它们进行了清理或使用了任何其他清理机制。这样做会更改密码,并导致不必要的额外编码。、、、、、、、、、、、?这两个列可能在此处失败,因此不确定这些列被索引为哪些列。检查else中查询mysqli_error$mysqli的错误。旁注:如果选中一个单选按钮,则会强制人们询问自己的性别,如果他们是女性,则会强制选择另一个单选按钮。有些人可能不想透露这些信息,只是说。@fred well YCS是唯一一个回答1000多个PDO问题的人,似乎在每个答案中都链接到他的博客^ ^注意这里的讽刺,当然,但这个字段似乎不是必需的,所以!空$city可能不需要。我建议使用三元运算符。我想他们必须选择如何处理表单/输入。此外,单选按钮似乎也不是必需的。OP需要决定他们想做什么。非常正确,谢谢你指出。我会进行相应的调整,使其更准确。单选按钮不使用空按钮,而是使用isset,有点旁注-是的,我没有检查表格是否正确,我现在会解决这个问题
if (!empty($name) || !empty($pass) || !empty($email))
    {
        $stmt = $mysqli->prepare("INSERT INTO login(`name`,`password`,`email`,`sex`,`city`) VALUES(?,?,?,?,?)");
        $stmt->execute([$name, $pass, $email, $sex, $city]);
        echo "result inserted";

    } else {
        echo 'You have not entered all of the fields.';
    }
<?php

if (isset($_POST['submit'])) {
    include_once('includes/db.php');


    if (!empty($_POST['name'])) {

        $name = $_POST['name'];
    } else {

        $name = " ";
    }

    if (!empty($_POST['pass'])) {

        $pass = $_POST['pass'];
    } else {

        $pass = " ";
    }

    if (!empty($_POST['email'])) {

        $email = $_POST['email'];
    } else {

        $email = " ";
    }

    if (isset($_POST['sex'])) {

        $sex = $_POST['sex'];
    } else {

        $sex = " ";
    }

    if (!empty($_POST['city'])) {
        $city = $_POST['city'];
    } else {

        $city = " ";
    }
    if ($stmt = $mysqli->prepare("INSERT INTO login VALUES(?,?,?,?,?)")) {
        $stmt->bind_param("sssss", $name, $email, $pass, $sex, $city);
        $stmt->execute();
        if ($stmt) {
            echo "result inserted";
        } else {

            echo "could not insert";
        }
    }
}

?>