Вставить в таблицу MySQL PHP


У меня возникли некоторые проблемы с созданием простой формы для вставки данных в таблицу MySQL. Я продолжаю получать эту ошибку SQL:

"Ошибка: у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом со значениями ' stock ('ItemNumber',' Stock')('#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);
    ?>
5 3

5 ответов:

Попробуйте это

Вы не должны использовать кавычки параметра вокруг поста . и вы должны использовать их внутри поста

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

Вы должны экранировать свои переменные, прежде чем вставлять их в mysql подобным образом

    Обратите внимание, что пример не вызывает mysqli_real_escape_string. Вам нужно было бы использовать только mysqli_real_escape_string , если бы вы вставляли строку непосредственно в запрос, но я бы посоветовал вам никогда этого не делать. Всегда используйте параметры, когда это возможно.

У вас есть дополнительная цитата, и вам нужно поставить галочки вокруг имени таблицы, так как оно содержит пробел.

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

Должно быть:

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

К вашему сведению, вы также широко открыты для SQL-инъекций

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

Пожалуйста, научитесь использовать привязку параметров. Вы создаете код с уязвимостями безопасности.

Вот как сделать ваш код в 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));
}

Проще использовать привязанные параметры, чем путать их с кавычками внутри кавычек.

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