4

MySQL テーブルにデータを挿入するための単純なフォームを作成するのに問題があります。次の SQL エラーが発生し続けます。

「エラー: SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。near 'stock ('ItemNumber', 'Stock') VALUES ('#4','3' ')' 行 1"

フォームの私のHTMLは次のとおりです。

    <form action="database.php" method="post">
    Item Number: <input type="text" name="ItemNumber">
    Stock: <input type="text" name="Stock">
    <input type="submit">
    </form>

そしてPHPは次のとおりです。

    <?php
    $con=mysqli_connect("localhost","root","root","inventory");
    if (mysqli_connect_errno($con))
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
     $sql = "INSERT INTO current stock ('ItemNumber', 'Stock')
    VALUES
    ('$_POST[ItemNumber]','$_POST[Stock]'')";
    if (!mysqli_query($con,$sql))
      {
      die('Error: ' . mysqli_error($con));
      }
    echo "1 record added";
    mysqli_close($con);
    ?>
4

5 に答える 5

7

これを試して

POST の周りにパラメーターの引用符を使用しないでください。POST内でそれらを使用する必要があります

       $sql = "INSERT INTO `current stock` (ItemNumber, Stock)
           VALUES
         ('".$_POST['ItemNumber']."', '".$_POST['Stock']."' )";

そのように変数をmysqlに挿入する前に、変数をエスケープする必要があります

  • この例では を呼び出さないことに注意してくださいmysqli_real_escape_string。文字列をクエリに直接埋め込む場合にのみ使用する必要がありmysqli_real_escape_stringますが、これを行わないことをお勧めします。可能な限り、常にパラメーターを使用してください。
于 2013-06-16T23:13:48.813 に答える
0

パラメータバインディングの使い方を学んでください。セキュリティの脆弱性を伴うコードを作成しています。

mysqli でコードを実行する方法は次のとおりです。

$sql = "INSERT INTO current stock (ItemNumber, Stock) VALUES (?, ?)";

if (!($stmt = mysqli_prepare($con, $sql))) {
    die('Error: ' . mysqli_error($con));
}

if (!mysqli_stmt_bind_param($stmt, "ii", $_POST[ItemNumber], $_POST[Stock])) {
    die('Error: ' . mysqli_stmt_error($stmt));
}

if (!mysqli_stmt_execute($stmt)) {
    die('Error: ' . mysqli_stmt_error($stmt));
}

引用符内の引用符と混同するよりも、バインドされたパラメーターを使用する方が簡単です。

于 2017-04-08T06:56:02.553 に答える