2012-07-28 86 views
-1

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

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

请停止与古mysql_编写新的代码*功能。他们不再被维护,社区已经开始[弃用流程](http://news.php.net/php.internals/53799)。相反,您应该了解准备好的语句并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)。如果你关心学习,[这里是一个很好的PDO相关教程](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)。 – DCoder 2012-07-28 12:25:33

+1

在脚本的顶部启动数据库连接,你正在分配'$ sql'两次,你没有进行基本检查,看看是否成功,并且你仍然使用mysql_ *函数..对我来说,它看起来像一个糟糕的开始PHP,尝试阅读更多。 – Gntem 2012-07-28 12:28:05

回答

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接口。

1

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

话虽如此,您的代码是广泛的开放注入攻击。在将它们放入数据库之前检查您的变量。如果我输入自己的名字为“Tom; drop table users”,你会怎么做?你的代码只是运行它?

1

显而易见的错误是,对于至少包含两列的表只插入一个值。在线路

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

$ sql中包含字符串

"INSERT INTO $DB_Table VALUES('$passwort')"; 
相关问题