PHP~列计数不';不匹配第1行的值计数

PHP~列计数不';不匹配第1行的值计数,php,mysql,Php,Mysql,我正在创建一个注册,我正在使用纯PHP而不是JavaScript将我的表单发送到MySQL数据库,因此一切正常,没有语法错误或任何问题,但我填写了所有信息,然后单击“注册”,它返回一条消息,说“列计数与第1行的值计数不匹配” 我才14岁,所以这对我来说很困惑有人有解决办法吗 这是我的插入代码: $sql = mysql_query("INSERT INTO users(firstname, lastname, email, password, day, month, year, gender)

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

我才14岁,所以这对我来说很困惑有人有解决办法吗

这是我的插入代码:

 $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());

有了代码,我看到您忘记插入$SEXT

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

INSERT INTO tblA (col1, col2) VALUES ('value1','value2');
如果省略该信息,MySQL将期望所有列:

如果您的桌子是这样的:

 CREATE TABLE tblA (
     col1 INT,
     col2 INT 
 );
INSERT INTO tblA VALUES ('value1', 'value2');
您可以插入如下信息:

 CREATE TABLE tblA (
     col1 INT,
     col2 INT 
 );
INSERT INTO tblA VALUES ('value1', 'value2');
如果省略列名并且没有为所有列指定值,MySQL将出现“column count Not match value count at row”错误,因为MySQL不知道在缺少的列中放置什么。使用如上所述的表结构

INSERT INTO tblA VALUES ('value1');
将导致该错误


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

您试图在8列中插入7个值-您缺少性别的插入

正确的代码是:

$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)

您应该对上面的所有变量执行此操作。您可以找到有关转义函数的更多信息。

您遗漏了性别列的值(最后一个)

您完全遗漏了性别值:

$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());

您可以发布您的PHP代码吗?可能是由于
INSERT
语句在
values()
中的值大于或小于
()
列中列出的值。发布您的代码,我们来看看。这与您的sql有关,而不是与phpIt有关。这很可能意味着值的数量与列的数量不匹配(即插入tbl(val1)值(1,2))。如果您没有指定要插入的列,则应该这样做。此问题有许多重复项。询问之前您是否搜索过Stackoverflow?不完全是-您可以发现您不需要为每一列提供数据-它可以保持为空,也可以自动填充该列的默认值。@Charles,您完全正确,但我在回答中尽量不提供太多信息。。)@查尔斯,只有在非严格模式下。我试过了,但还是出现了错误,即使设置了默认值。啊,这很有趣,谢谢!似乎我只在非严格模式下工作过。