获取错误';列计数没有';t匹配行1';处的值计数;,但是列=行


Getting error 'Column count doesn't match value count at row 1', but columns = rows

正如标题所示,我得到了"列计数与第1行的值计数不匹配"错误。在将我想发送到数据库的值与我的数据库进行比较后,没有发现错误,我查看了互联网并尝试了各种解决方案。到目前为止,他们都没有工作。我还尝试使用SET而不是VALUES。像"Passwort"="$passport"-也没有起到作用。这是我的代码,也许有人发现了我遗漏的一个明显错误?

 $name = ($_GET["name"]);
 $sql = "INSERT INTO $DB_Table VALUES('$name')";
 $passwort = ($_GET["passwort"]);
 $sql = "INSERT INTO $DB_Table VALUES('$passwort')";
 $con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die (mysql_error()); 
 mysql_select_db($DB_Name,$con) or die(mysql_error()); 
 mysql_set_charset('utf8', $con);
 mysql_query("INSERT INTO $DB_Table (Name,Passwort) VALUES ('$name','$passwort')");
 $res = mysql_query($sql,$con) or die(mysql_error());
 mysql_close($con);
if ($res) {
    echo "Der Benutzer wurde neu angelegt!";
}else{
    echo "Der Benutzername ist bereits vergeben";
}
$sql = "INSERT INTO $DB_Table VALUES('$name')";
$sql = "INSERT INTO $DB_Table VALUES('$passwort')"; 

在这里,您刚刚覆盖了前一个变量,那么拥有前一个有什么意义呢?

然后您试图执行查询,但会失败,因为表中有更多的列。

$res = mysql_query($sql,$con) or die(mysql_error());

我甚至不知道你为什么要这么做,因为前一行已经插入了。你是故意这么做的吗

$sql = "INSERT INTO $DB_Table (Name,Passwort) VALUES ('$name','$passwort')");
$res = mysql_query($sql,$con) or die(mysql_error());

也就是说,您的代码很容易受到SQL注入攻击,而且它使用的是旧的mysql接口。

好吧,你应该改变一些事情。为了回答您的问题,您的一个变量在插入时可能是空的。

话虽如此,您的代码对注入攻击是开放的。在将变量放入数据库之前,请先检查它们。如果我输入我的名字为"Tom;drop table users;",而您的代码只是运行它,您会怎么办?

明显的错误是,对于至少有两列的表,只插入一个值。在线

$res = mysql_query($sql,$con) or die(mysql_error());

$sql包含字符串

"INSERT INTO $DB_Table VALUES('$passwort')";