MySQL错误:"列数与第1行的值计数不匹配" - 初学者帮助

buy*_*ies 6 php mysql

基本上,正在使用php和MySQL.我是初学者.

我要做的是将用户注册到我的数据库,因此将表单输入存储到我的users_tb.

尝试将值插入表单时出现此错误:

"列数与第1行的值计数不匹配"

我以为是因为我没有插入user_id值(这是自动增量),所以我尝试在我的查询中插入''用于user_id,但仍然没有运气.

这是查询:

$query = "INSERT INTO users_tb (user_id, user_status, user_gender, user_firstname, user_surname, student_number,
    user_email, user_dob, user_name, user_pass) 
    VALUES('','$status','$gender','$firstname','$surname','$hnumber','$dob','$username','$password')";
    mysql_query($query) or die(mysql_error());
    mysql_close();
Run Code Online (Sandbox Code Playgroud)

这是否有帮助.如果您需要任何其他代码,请说.

只是为了确保,插入不必是表中字段的顺序相同吗?

非常感谢,

Cze*_*ogy 13

你错过了一个值.

对于这么多列的查询(如果你只插入一行),我建议使用以下INSERT语法,它更容易阅读,不太可能导致问题.

$query = "INSERT INTO users_tb SET
          user_status    = '". mysql_real_escape_string($status) ."',
          user_gender    = '". mysql_real_escape_string($gender) ."',
          user_firstname = '". mysql_real_escape_string($firstname) ."',
          user_surname   = '". mysql_real_escape_string($surname) ."',
          student_number = '". mysql_real_escape_string($hnumber) ."',
          user_email     = '". mysql_real_escape_string($email) ."',
          user_dob       = '". mysql_real_escape_string($dob) ."',
          user_name      = '". mysql_real_escape_string($username) ."',
          user_pass      = '". mysql_real_escape_string($password) ."'";
mysql_query($query) or die(mysql_error());
mysql_close();
Run Code Online (Sandbox Code Playgroud)

  • 不,我觉得阅读起来要简单得多.对我而言,这是代码中非常重要的一部分. (7认同)
  • 你不觉得输入所有那些烂摊子很无聊吗? (4认同)
  • 很难过你会因为一段代码而自杀.我有时会像你提出的那样使用循环等类似的东西,但通常这个简单的类似列表的查询在可读性和可维护性方面效果更好,如果我需要以不同的方式修改某些字段等,也可以更好地控制输入. (2认同)
  • 较小的代码不必等于更好的代码.并且仅仅因为在这种情况下,所有值都以相同的方式处理(转义的POST值)并不意味着它总是那样,通常不同的函数应用于来自不同源的不同值.当然,你可以将它分成更多不同的循环,但最终它可能会更加混乱.但也许我们的情景差异很大. (2认同)

Mar*_*ers 6

你错过了一个值user_email.

$query = "INSERT INTO users_tb
          (
              user_status,
              user_gender,
              user_firstname,
              user_surname,
              student_number,
              user_email,
              user_dob,
              user_name,
              user_pass
          ) 
          VALUES
          (
              '$status', 
              '$gender',
              '$firstname',
              '$surname',
              '$hnumber',
              '$email',    -- <--- you forgot this!
              '$dob',
              '$username',
              '$password'
          )";
Run Code Online (Sandbox Code Playgroud)

只是提醒一下:mysql_real_escape_string如果您还没有这样做,就应该使用这些值.