-1

タイトルが示すように、「列数が行 1 の値数と一致しません」というエラーが表示されます。データベースに送信したい値を自分のデータベースと比較した後、間違いが見つからなかったので、インターネットを調べてさまざまな解決策を試しました。これまでのところ、それらのどれも機能しませんでした。また、VALUES の代わりに SET を使用しようとしました。'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

さて、変更すべき点がいくつかあります。あなたの質問に答えるために、変数の 1 つが挿入時に空である可能性があります。

そうは言っても、あなたのコードはインジェクション攻撃に対して広く開かれています。変数をデータベースに入れる前に確認してください。私の名前を「Tom; drop table users;」と入力したらどうしますか? あなたのコードはそれを実行しましたか?

于 2012-07-28T12:25:56.563 に答える
1

明らかな間違いは、少なくとも 2 つの列を持つテーブルに値を 1 つだけ挿入することです。ラインで

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

$sql には文字列が含まれています

"INSERT INTO $DB_Table VALUES('$passwort')";
于 2012-07-28T12:30:58.700 に答える
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 に答える