2013-06-16 7 views
3

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

"Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'stock ('ItemNumber', 'Stock') VALUES ('#4','3'')' at line 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

Ваш веб-страница открыта настежь для инъекций SQL Не код, как это вместо использования хранимых процедур, параметризованных?.. SQL и запретить пользователю вводить специальные символы ... – Takarakaka

+0

Я бы также избегал использования символа пробела в имени таблицы или поля. – MadMarc

+0

Я знаю, что это старый вопрос, но у Билла Карвина есть лучший ответ. –

ответ

6

попробовать этот

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

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

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

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

Я получаю ошибку сервера при попытке этого ... –

+0

Я все еще getti ng ошибка сервера –

+0

работал :) спасибо! –

2

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

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

должно быть:

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

FYI, вы широко открыты для SQL injections

+0

hmm ... Я до сих пор получаю эту ошибку –

+0

См. мой обновленный ответ, поскольку у вас есть две ошибки –

-2
<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>` 
0
?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

https://www.youtube.com/watch?v = KvY1aw5cJUw & list = PLImJFXvEG-10ggD_nBGKcvyaDeclQ8fOu & index = 7 – Niraj

+0

Если это подразумевается как часть вашего [существующего ответа] (http://stackoverflow.com/a/43278095/794749), добавьте это в свой существующий ответ и добавьте объяснение. В противном случае это не очень хороший ответ. –

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

легче использовать связанные параметры, чем получить все путают с кавычками-внутри кавычек. .

-1
"mysqli_error ($ сопп); mysqli_close ($ сопп); }} >
Смежные вопросы