我要做的是将用户注册到我的数据库,因此将表单输入存储到我的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();
是否有帮助。如果您需要任何其他代码,请说。
只是为了确保插入不必与字段在表中的顺序相同吗?
非常感谢,答案 0 :(得分: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();
答案 1 :(得分: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'
)";
只是提醒一下:如果你还没有这样做,你应该使用mysql_real_escape_string
来逃避这些值。
答案 2 :(得分:2)
Mark Byers回答了问题部分,但没有解决这个问题:
只是为了确保插入不必与字段在表中的顺序相同吗?
不,它们不必与表中的列具有相同的顺序,但是列列表和值列表必须在计数和数据类型中匹配。你遇到的问题是Mark发现的问题;您错过了user_email
的值,这意味着dob
值正在尝试进入该列。 MySQL发现您列出的列没有足够的值,并将错误报告给您。
Column count doesn't match value count
实际上是一个非常明确的消息,这对于数据库引擎来说是不寻常的。 :)
答案 3 :(得分:1)
您可以使用此简单函数从$ _POST数组和允许字段列表中创建查询:
function dbSet($fields) {
$set='';
foreach ($fields as $field) {
if (isset($_POST[$field])) {
$set.="`$field`='".mysql_real_escape_string($_POST[$field])."', ";
}
}
return substr($set, 0, -2);
}
像这样使用
$table = "users_tb";
$fields = explode(" ","user_status user_gender user_firstname user_surname student_number user_email user_dob user_name user_pass");
$query = "INSERT INTO $table SET ".dbSet($fields);
mysql_query($query) or trigger_error(mysql_error()." in ".$query);
当然假设HTML表单字段名称与SQL表字段名称匹配,这是非常方便的考虑
答案 4 :(得分:0)
您有10个要插入的字段,但是您只提供了9个值
答案 5 :(得分:0)
列出10列,但只有9个值。