0

以下のコードは、データベースに何も挿入しませんが、エラーなしで実行されます。

<?php
$con=mysqli_connect("localhost","root","","teachme");
//check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

//add details in database
if (isset($_POST['user']) and isset($_POST['pass']) and isset($_POST['division'])) {
    $user = mysql_real_escape_string($_POST['user']);
    $pass = mysql_real_escape_string($_POST['pass']);
    $division = mysql_real_escape_string($_POST['division']);
    mysqli_query($con,"INSERT INTO users (username, password, division, id)
VALUES ($user, $pass, $division)");
    echo 'Succesfully added entries onto the database.. ';
    echo $user;
    echo $pass;
    echo $division;
    echo '<a href="../">Return to homepage</a>';
}
else {
    echo "An error occured, try again!";
}
?>

すべての変数が正しく転送されるため、上記の echo ステートメントを使用しました。私は新しいので、これは非常にばかげた質問に違いないことを知っています。 データベース

4

4 に答える 4

2
    mysqli_query($con,"INSERT INTO users (username, password, division, id)
VALUES ($user, $pass, $division)");

現在のクエリが列に挿入しようとしているときに、4 つの列名を参照しましたが、3 つの変数参照が含まれています。

データベースを持っている場合

ID の Auto_increment の場合、クエリは次のようになります。

    mysqli_query($con,"INSERT INTO users (username, password, division)
VALUES ($user, $pass, $division)");

そうでない場合。id列参照を埋めるために、行ごとに更新される変数を作成する必要があります。

mysqli_query($con,"INSERT INTO users (username, password, division, id)
VALUES ($user, $pass, $division, $ID_Placeholder)"); // This will not work without a reference. Take this as an example only 

これが問題であることをテストするために、これを実行して挿入を実行します。

$ID_Placeholder = 4; // just a dummy test variable, to check the insert but also show you where you have went wrong. 
mysqli_query($con,"INSERT INTO users (username, password, division, id)
VALUES ($user, $pass, $division, $ID_Placeholder)");
于 2013-03-27T23:52:08.183 に答える
0
  1. mysql_real_escape_string - 使用しないでください。

    リンク識別子が指定されていない場合、mysql_connect() によって開かれた最後のリンクが想定されます。そのようなリンクが見つからない場合、引数なしで mysql_connect() が呼び出されたかのようにリンクを作成しようとします。mysql_* は一切使用しないでください。

  2. エスケープを使用しないでください。準備済みステートメントを使用します。

  3. 関数 ( mysqli_query ) の使用に関するドキュメントを確認してください。

  4. Mysql エラーは PHP エラーではありません。MySQL エラーを確認したい場合は、mysqli_errorを使用してください。

于 2013-03-28T00:24:28.750 に答える
0
mysqli_query($con,"INSERT INTO users (username, password, division, id)
VALUES ($user, $pass, $division)");

列数が一致しません。5 つの列に 3 つの値を入力しようとしています。値句に「null」を設定するか、不要な「宛先」列を削除してください。

于 2013-03-27T23:53:00.840 に答える
0

上記のように、ステートメント内のフィールド数と提供される値の数が一致しないという事実に加えて、INSERT次のように値も引用する必要があると思います。

mysqli_query($con,"INSERT INTO users (username, password, division)
VALUES ('$user', '$pass', '$division')");

mysql_real_escape_string変数自体で単一引用符のエスケープを処理しますが、それらを引用しません。

さらに、次の点を確認してください。

  1. mysqli_queryINSERT が成功したかどうかに応じて TRUE または FALSE を返します。FALSE が返された場合は、呼び出しmysqli_errorて何が起こったのかを調べてください。
  2. このコードを準備済みステートメントに置き換えることを検討してください。情報と例については、こちらを参照してください。
于 2013-03-28T00:01:27.507 に答える