Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取错误';列计数不为';不匹配第1行的值计数';,但是列=行_Php_Mysql - Fatal编程技术网

Php 获取错误';列计数不为';不匹配第1行的值计数';,但是列=行

Php 获取错误';列计数不为';不匹配第1行的值计数';,但是列=行,php,mysql,Php,Mysql,正如标题所示,我遇到了“第1行的列计数与值计数不匹配”错误。在将我要发送到数据库的值与我的数据库进行比较后,我没有发现错误,于是在互联网上查找并尝试了各种解决方案。到目前为止,他们都没有工作。我还尝试使用SET而不是value。像'Passwort'='$Passwort'-也没有做到这一点。这是我的代码,也许有人发现了我遗漏的一个明显的错误 $name = ($_GET["name"]); $sql = "INSERT INTO $DB_Table VALUES('$name')";

正如标题所示,我遇到了“第1行的列计数与值计数不匹配”错误。在将我要发送到数据库的值与我的数据库进行比较后,我没有发现错误,于是在互联网上查找并尝试了各种解决方案。到目前为止,他们都没有工作。我还尝试使用SET而不是value。像'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";
}

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

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

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

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

$res = mysql_query($sql,$con) or die(mysql_error());
$sql包含该字符串

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

请停止使用古老的mysql_*函数编写新代码。它们不再得到维护,社区已开始恢复。相反,您应该学习准备好的语句,并使用或。如果您想学习,.start database connection位于脚本的顶部,那么您将分配两次
$sql
,您没有进行基本检查以确定这是否成功,并且您仍然使用mysql_*函数。。对我来说,这似乎是一个糟糕的PHP开始,尝试阅读更多。