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