web-dev-qa-db-ja.com

MySQLテーブルに挿入PHP

MySQLテーブルにデータを挿入するための単純なフォームを作成するのに問題があります。私はこのSQLエラーを受け取り続けます:

"エラー:SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、 '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
Jake Ols

これを試して

POST。の周りのパラメーターの引用符は使用しないでください。また、POST内で使用する必要があります。

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

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

  • この例ではmysqli_real_escape_stringを呼び出さないことに注意してください。文字列をクエリに直接埋め込む場合にのみmysqli_real_escape_stringを使用する必要がありますが、これは絶対に行わないことをお勧めします。可能な限り、常にパラメータを使用してください。
7
echo_Me

余分な引用符があり、スペースが含まれているため、テーブル名をチェックする必要があります。

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

する必要があります:

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

参考までに、あなたは SQLインジェクション にも広くオープンです

2
John Conde

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

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));
}

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

0
Bill Karwin
?php
  $conn=new mysqli("localhost","root","","inventory")
  or die("not connected".mysqli_connect_error());
  if(isset($_POST['submit']{
    $ItemNumber=$_POST['ItemNumber'];
    $Stock=$_POST['Stock'];
    $sql="insert into current stock(ItemNumber,Stock) values('$ItemNumber','$Stock')";
    $query=mysqli_query($conn,$sql);
    if($query){
      echo"1 row inserted";
    }else{
      echo mysqli_error($conn);
    }
  }
?>
0
Niraj