Php MySQL插入到特定字段失败

Php MySQL插入到特定字段失败,php,mysql,Php,Mysql,我相信我的代码中有什么东西阻止了PHP被插入到数据库中,这很奇怪,因为我在站点上的其他表单中使用了相同的设置,所有这些表单都成功地解析了PHP 最让我困惑的是,如果只指定了用户名和密码,表单将成功通过,但当我尝试添加电子邮件(也是varchar)和组(1个字符的整数)时,表单失败。我在下面添加了我的代码,希望你能帮我找出我做错了什么 PHP: HTML: 添加用户 用户名 暗语 电子邮件 '; ?> 组 大学生 教师 管理 提交 组是一个保留关键字,您应该避免将这些单词作为列名。 但是,如果您

我相信我的代码中有什么东西阻止了PHP被插入到数据库中,这很奇怪,因为我在站点上的其他表单中使用了相同的设置,所有这些表单都成功地解析了PHP

最让我困惑的是,如果只指定了
用户名
密码
,表单将成功通过,但当我尝试添加电子邮件(也是
varchar
)和组(1个字符的整数)时,表单失败。我在下面添加了我的代码,希望你能帮我找出我做错了什么

PHP:

HTML:


添加用户
用户名
暗语
电子邮件
'; ?>
组
大学生
教师
管理
提交

组是一个保留关键字,您应该避免将这些单词作为列名。 但是,如果您想使用它,请将它们包装成反勾号

`group`
在这里签出完整的列表

标准SQL as列禁止表中的大多数单词 或表名(例如,组)。一些是保留的,因为MySQL 需要它们并使用yacc解析器


group是一个保留关键字,您应该避免将这些单词作为列名。 但是,如果您想使用它,请将它们包装成反勾号

`group`
在这里签出完整的列表

标准SQL as列禁止表中的大多数单词 或表名(例如,组)。一些是保留的,因为MySQL 需要它们并使用yacc解析器


代码中最大的错误是实际的
mysql\u查询
行:

$result = mysql_query($result);
因此,正在运行的查询是
$result
(甚至没有设置),而
$result
是查询
$result
$result
?这不应该像这样使用
$order

$result = mysql_query($order);
您的代码还存在一些其他问题,包括使用保留的MySQL名称<代码>组-因此我重构了您的代码,以覆盖所有基础。包括修改您的
mysql\u*
调用以使用
mysqli\u*
,因为
mysql\u*
在PHP版本5.3到5.4中被贬值,并且完全从PHP 5.5中删除。给你。附注如下:

// Connecting, selecting database
$link = mysqli_connect('DOMAIN', 'USERNAME', 'PASSWORD', 'DATABASE') or die(mysqli_connect_errno());

// Set a '$_POST' array and roll through each value.
$post_array = array('name', 'pass', 'email', 'group');
foreach ($post_array as $post_key => $post_value) {
  $$post_value = isset($_POST[$post_value]) && !empty($_POST[$post_value]) ? $_POST[$post_value] : null;
}

// MD5 the password.
$pass = md5($pass);

// Unsure if you need to add slashes if you are using mysqli_stmt_bind_param.
// So including here if you need it. Just change the mysqli_stmt_bind_param to use $email_md5
$email_md5 = addslashes($email);

// Set the query.
$order = "INSERT INTO `users` (`name`, `pass`, `email`, `group`)"
       . " VALUES (?, ?, ?, ?)"
       ;

// Bind the params.
mysqli_stmt_bind_param($order, 'ssss', $name, $pass, $email, $group);

// Run the query.
$result = mysqli_query($link, $order) or die(mysqli_error());

if ($result) {
   header("Location: manageusers.php?result=success&name=$name");
}

// Free the result set.
mysqli_free_result($result);

// Close the connection.
mysqli_close($link);
以下是我所做工作的细目:

  • 您的查询行是:
    $result=mysql\u query($result)
    但不应该是
    $result=mysqli\u query($order)?我为mysqli重写了那一行,但这是我发现的最大错误
  • 我将您的代码改为使用MySQLi扩展,这是现在做事情的首选方式,因为在PHP版本5.3到5.4中,
    mysql.*
    被贬低,并且完全从PHP5.5中删除
  • 我还设置了一个
    $\u POST
    数组,这样所有的POST键都可以简单地滚动&使用
    isset
    进行一些基本验证!空的
    。与以前的脚本相比,将此与相结合可以提供更多的基本验证
  • 您正试图在表名
    group
    中插入,但
    group
    实际上是一个不应使用的MySQL保留字。如果使用了它,它应该像我的代码中所示那样放在后面的记号中
  • 我还使用命令将参数实际绑定到查询,这是一种防止再次注入MySQL的简单方法。还可以使用和整洁地关闭MySQL进程
  • 你的“成功”代码毫无意义。您有一个
    echo
    ,在一行上没有任何内容,后跟
    标题(…)调用,然后后跟
    die()。我删除了
    echo
    以及
    die()

    • 代码中最大的错误是实际的
      mysql\u查询
      行:

      $result = mysql_query($result);
      
      因此,正在运行的查询是
      $result
      (甚至没有设置),而
      $result
      是查询
      $result
      $result
      ?这不应该像这样使用
      $order

      $result = mysql_query($order);
      
      您的代码还存在一些其他问题,包括使用保留的MySQL名称<代码>组
      -因此我重构了您的代码,以覆盖所有基础。包括修改您的
      mysql\u*
      调用以使用
      mysqli\u*
      ,因为
      mysql\u*
      在PHP版本5.3到5.4中被贬值,并且完全从PHP 5.5中删除。给你。附注如下:

      // Connecting, selecting database
      $link = mysqli_connect('DOMAIN', 'USERNAME', 'PASSWORD', 'DATABASE') or die(mysqli_connect_errno());
      
      // Set a '$_POST' array and roll through each value.
      $post_array = array('name', 'pass', 'email', 'group');
      foreach ($post_array as $post_key => $post_value) {
        $$post_value = isset($_POST[$post_value]) && !empty($_POST[$post_value]) ? $_POST[$post_value] : null;
      }
      
      // MD5 the password.
      $pass = md5($pass);
      
      // Unsure if you need to add slashes if you are using mysqli_stmt_bind_param.
      // So including here if you need it. Just change the mysqli_stmt_bind_param to use $email_md5
      $email_md5 = addslashes($email);
      
      // Set the query.
      $order = "INSERT INTO `users` (`name`, `pass`, `email`, `group`)"
             . " VALUES (?, ?, ?, ?)"
             ;
      
      // Bind the params.
      mysqli_stmt_bind_param($order, 'ssss', $name, $pass, $email, $group);
      
      // Run the query.
      $result = mysqli_query($link, $order) or die(mysqli_error());
      
      if ($result) {
         header("Location: manageusers.php?result=success&name=$name");
      }
      
      // Free the result set.
      mysqli_free_result($result);
      
      // Close the connection.
      mysqli_close($link);
      
      以下是我所做工作的细目:

      • 您的查询行是:
        $result=mysql\u query($result)
        但不应该是
        $result=mysqli\u query($order)?我为mysqli重写了那一行,但这是我发现的最大错误
      • 我将您的代码改为使用MySQLi扩展,这是现在做事情的首选方式,因为在PHP版本5.3到5.4中,
        mysql.*
        被贬低,并且完全从PHP5.5中删除
      • 我还设置了一个
        $\u POST
        数组,这样所有的POST键都可以简单地滚动&使用
        isset
        进行一些基本验证!空的
        。与以前的脚本相比,将此与相结合可以提供更多的基本验证
      • 您正试图在表名
        group
        中插入,但
        group
        实际上是一个不应使用的MySQL保留字。如果使用了它,它应该像我的代码中所示那样放在后面的记号中
      • 我还使用命令将参数实际绑定到查询,这是一种防止再次注入MySQL的简单方法。还可以使用和整洁地关闭MySQL进程
      • 您的“成功”代码