php - MariaDB SQL 语法错误 - “在‘order(”附近使用正确的语法
问题描述
查询失败!您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“order(product_id,customer_name,total_bill,quantity)VALUES(1,'taha khan',5368,22)' 附近使用正确的语法
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$product = $_POST['product_id'];
$customer_name = $_POST['customer'];
$qty = $_POST['qty'];
$product_cost = $_POST['product_cost'];
$total_bill = $product_cost * $qty;
$result = "INSERT INTO order(product_id,customer_name,total_bill,quantity)VALUES($product,'$customer_name',$total_bill,$qty)";
$query = query($result);
confirmQuery($query);
}
?>
解决方案
你不能命名你的表order
并像那样使用它。那是一个保留关键字。
话虽如此,如果您坚持这样做,您仍然可以使用该名称:
INSERT INTO `order` (product_id...
反引号将允许它工作。我的建议是命名您的表orders
,以避免查询冲突。
对我来说重要的是还要注意您的查询容易受到 SQL 注入攻击。您永远不应该将原始输入直接放入您的数据库中。没有什么能阻止我在customer
字段中发布 SQL 查询的片段并窃取数据。
花点时间学习如何使用准备好的语句,这将是非常有益的:https ://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
推荐阅读
- swift - 错误 ITMS-90283:具有通用购买的 macCatalyst 的配置文件无效错误
- c++ - 通过指定默认参数扩展基类方法
- kubernetes - service.yaml 中 GCE 的负载均衡器超时注释
- javascript - 渲染多个输入字段导致 200 项后滞后
- angularjs - AngularJS ng-click 属性未在 ng-repeat 中的发布请求上更新
- cefsharp - 我可以安全删除哪些 CEF Sharp 文件?
- azure - 当 AKS API 授权范围到位时,Kubectl 不起作用
- javascript - Discord 随机图像机器人垃圾邮件
- reactjs - 如何在 Typescript 中获取 node_modules 包类型
- android - 带有嵌套导航图的循环参考