获取错误'列计数与第1行的值计数不匹配,但列=行

时间:2012-07-28 12:22:02

标签: php mysql

正如标题所示我得到的'列计数与第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";
}

3 个答案:

答案 0 :(得分:1)

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

话虽如此,您的代码对注入攻击持开放态度。在将变量放入数据库之前检查它们。如果我输入我的名字,你会怎么做?汤姆; drop table users;"你的代码刚刚运行了吗?

答案 1 :(得分: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接口。

答案 2 :(得分:1)

显而易见的错误是,您只为一个至少包含两列的表插入一个值。在行

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

$ sql包含字符串

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