16

我正在创建一个注册,我只使用直接的 PHP 而不是 JavaScript 将我的表单发送到 MySQL 数据库,所以一切正常,没有语法错误或其他任何东西,但我填写了所有信息并单击“注册”然后它返回一条消息“列计数与第 1 行的值计数不匹配”。

我只有 14 岁,所以这对我来说很困惑,有人有解决方案吗?

这是我的 INSERT INTO 代码:

 $sql = mysql_query("INSERT INTO users(firstname, lastname, email, password, day, month, year, gender) 
 VALUES('$firstname','$lastname','$email','$db_password','$day','$month','$year')")  
 or die (mysql_error());
4

4 回答 4

24

您正在尝试将 7 个值插入 8 列 - 您缺少插入性别。

正确的代码是:

$sql = mysql_query("INSERT INTO users(firstname, lastname, email, password, day, month, year, gender) 
VALUES('$firstname','$lastname','$email','$db_password','$day','$month','$year', '$gender')")  
or die (mysql_error());

顺便说一句,如果您还没有这样做,我强烈建议您先转义字符串,然后再将它们传递给查询,如下所示:

$firstname=mysql_real_escape_string($firstname)

您应该对上述所有变量执行此操作。在这里您可以找到有关转义功能的更多信息。

于 2012-08-16T14:27:57.167 回答
1

有了你的代码,我看到你忘记插入 $gender。

将数据插入 MySQL 表时,您必须指定哪些数据进入哪一列。您可以通过在 VALUES 部分之前指定列名来执行此操作:

INSERT INTO tblA (col1, col2) VALUES ('value1','value2');

如果省略该信息,MySQL 将期望所有列:

如果你的表是这样的:

 CREATE TABLE tblA (
     col1 INT,
     col2 INT 
 );

您可以插入如下信息:

INSERT INTO tblA VALUES ('value1', 'value2');

如果您省略列名并且没有为所有列指定值,MySQL 将出现“列数与行的值数不匹配”错误,因为 MySQL 不知道在缺少的列中放入什么。有了上面的表结构,

INSERT INTO tblA VALUES ('value1');

将导致该错误。

在非严格模式下,MySQL 将为省略的列名插入默认值。

于 2012-08-16T14:25:48.173 回答
0

您错过了性别列的值(最后一个)

于 2012-08-16T14:28:47.327 回答
-1

您完全缺少性别值:

$sql = mysql_query("INSERT INTO users(firstname, lastname, email, password, day, month, year, gender) 
VALUES('$firstname','$lastname','$email','$db_password','$day','$month','$year', 'gender goes here')") 
or die (mysql_error());
于 2012-08-16T14:31:54.193 回答