【问题标题】:Insert data to database not working (PHP-SQL)将数据插入数据库不起作用(PHP-SQL)
【发布时间】:2016-07-02 04:56:15
【问题描述】:

我的 PHP 代码中的插入数据 sql 命令不起作用。有人可以帮忙吗?

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

用户在此字段中输入的值应保存到我的表“用户”中,其中包含列(ID [这是主键 /INT]、名称 [TEXT]、姓氏 [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';
        }

    }

【问题讨论】:

  • mysqli_error 给你什么?此外,您的代码很容易受到 SQL 注入:您应该开始使用带有占位符的预准备语句以避免这种暴露。
  • 因为你在主键VALUES (' ',中插入空格
  • 您好,感谢您的快速回复,感谢您的建议。我刚刚开始学习 sql 和 php,所以这对我来说更像是一个开始练习,但会考虑查看你所说的内容。没有错误显示。我已经寻找了与此类似的其他帖子,其中大多数都与引号的使用有关……所以这是我的 $sql 变量打印的示例:INSERT INTO users (ID, name, lastname, e-mail,用户名、密码) VALUES (' ','Bill' ,'Gates' ,'bill.gates@microsoft.com' ,'bill' ,'bill01');
  • 正如Saty 所指出的,您正在插入一个空格作为您的主ID。您的 ID 字段很可能设置为“自动递增”,这意味着您可以简单地从插入中完全省略它,INSERT .... (name, ....) VALUES('JOHN', .... 就像这样。
  • 谢谢,我删除了空间,但仍然无法正常工作。我还尝试为该值键入 NULL 而不是对 ID 列使用空字符串,但仍然没有成功。还尝试从插入中删除 ID,但仍然无法正常工作(列和值)

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


【解决方案1】:

除了已在 cmets 中为空间 VALUES (' ', 为 ID 列等概述的内容外,您的电子邮件列名称包含连字符并被解释为 e MINUS @987654339 @ 和作为数学运算。

要么将其重命名为e_mail,要么在其周围打勾。

`e-mail`

阅读以下有关标识符限定符的内容:

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

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


您当前的代码对SQL injection 开放。使用prepared statements,或PDO 和prepared statements。


密码

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

使用以下方法之一:

其他链接:

关于列长度的重要旁注:

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

您需要更改列的长度并使用新的哈希值重新开始以使其生效。否则,MySQL 将静默失败。

【讨论】:

  • 我现在在移动设备上,所以我无法显示刻度。我会在几分钟内改进我的答案
  • 啊,这个该死的查询让我目瞪口呆,看得很清楚。
  • @Epodax 希望这一切都是错误的。让我们看看操作员怎么说
  • “非常感谢!现在可以使用了,错误出现在 'e-mail' 字段,它不喜欢破折号 -。谢谢!” - Spot开。
  • 天哪,它是连字符。不错的捕获@Fred-ii- !!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多