Вставить в таблицу 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 ответов:
Попробуйте это
Вы не должны использовать кавычки параметра вокруг поста . и вы должны использовать их внутри поста
$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)); }
Проще использовать привязанные параметры, чем путать их с кавычками внутри кавычек.