将数据插入数据库不起作用(PHP-SQL)

时间:2016-03-16 10:52:42

标签: php mysql database sql-insert insert-into

我的PHP代码中的insert data sql命令无效。有人可以帮忙吗?

我有一个注册表单,它从输入字段(名称,姓氏,电子邮件,用户名和密码)中获取值

用户在此字段中输入的值应保存到我的表“users”列中(ID [主键/ INT],名称[TEXT],lastname [TEXT],电子邮件[VARCHAR] ],用户名[VARCHAR]和密码[VARCHAR])。

这是我目前的代码:

if (isset ($_POST['name'],$_POST['lastname'],$_POST['email'],$_POST['username'], $_POST['password']))
    {
        //connect to database
        $conn = mysqli_connect ('localhost', 'root', '', 'test_database');

        if ($conn)          
        {
            $sql="SELECT username FROM users WHERE username = '" . $_POST['username'] . "';";
            $query = mysqli_query ($conn, $sql);
            $result = mysqli_fetch_array ($query);

            if ($result ['username'])
            {
                header ('Location: ' . $_SERVER['PHP_SELF'] . '?errno=1');
            }
            else
            {
                $sql="INSERT INTO users (ID, name, lastname, e-mail, username, password) VALUES (' ','" .$_POST['name'] . "' ,'" . $_POST['lastname']. "' ,'" . $_POST['email']. "' ,'" . $_POST['username']. "' ,'" . $_POST['password']. "');";
                mysqli_query ($conn, $sql);
                mysqli_close ($conn);   
                //registration completed, redirect to index page
                //header ('Location:index.php?reg=1');

            }
        }

        else
        {
            echo 'connection error';
        }

    }

2 个答案:

答案 0 :(得分:4)

除了VALUES (' ',列等空间ID的评论中已经概述的内容之外,您的电子邮件列名称包含一个连字符,并被解释为e MINUS mail并作为数学运算。

将其重命名为e_mail或在其周围放置滴答声。

`e-mail`

在标识符限定符上阅读以下内容:

在查询中使用mysqli_error($conn)会引发语法错误。

旁注:出于多种原因,您应该转义数据,一个是防止SQL注入,如果您的数据可能包含MySQL可能会抱怨的字符,例如John's Bar & Grill

您目前的代码向SQL injection开放。使用prepared statementsPDOprepared statements

<强>密码

我还注意到您可能以纯文本格式存储密码。不建议这样做。

使用以下其中一项:

其他链接:

关于列长的重要说明:

如果您决定使用password_hash()或隐藏,请务必注意,如果您当前的密码列长度低于60,则需要将其更改为(或更高)。手册建议长度为255。

您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。

答案 1 :(得分:0)

您使用''插入ID。该ID应该是自动递增且唯一的。您不能向所有人插入空格。 尝试从插入查询中删除ID。将您的查询变成这个

$sql="INSERT INTO users (name, lastname, e-mail, username, password) VALUES ('" .$_POST['name'] . "' ,'" . $_POST['lastname']. "' ,'" . $_POST['email']. "' ,'" . $_POST['username']. "' ,'" . $_POST['password']. "');";