-1

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

 $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";
}
4

3 回答 3

1

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

话虽如此,您的代码很容易受到注入攻击。在将变量放入数据库之前检查它们。如果我输入我的名字为“Tom; drop table users;”,你会怎么做?而你的代码刚刚运行它?

于 2012-07-28T12:25:56.563 回答
1
$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 接口。

于 2012-07-28T12:29:01.257 回答
1

明显的错误是您只为至少有两列的表插入一个值。在行

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

$sql 包含字符串

"INSERT INTO $DB_Table VALUES('$passwort')";
于 2012-07-28T12:30:58.700 回答