4

我在制作一个简单的表单以将数据插入 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

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 回答
2

你有一个额外的引号,你需要在你的表名周围打勾,因为它包含一个空格。

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

应该:

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

仅供参考,您也对SQL 注入持开放态度

于 2013-06-16T23:09:40.687 回答
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);
    }
  }
?>
于 2017-04-07T12:36:08.500 回答
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 回答
-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>`
于 2017-04-07T12:24:48.050 回答