PHP

时间:2016-11-20 08:12:56

标签: php mysql insert double-quotes single-quotes

我花了两天时间试图弄清楚为什么这句话不会将这些数据插入我的数据库。在这里阅读所有类似的问题并尝试没有运气。这是声明:

$sql = "INSERT INTO removal_shipment_detail (request_date, order_id, shipment_date, product, product_name, delivered, quantity, local, tracking, update) VALUES ('".$request_date."','".$order_id."','".$shipment_date."','".$product."','".$product_name."','".$delivered."','".$quantity."','".$local."','".$tracking."','".$update."')";

这里的数量是INT。我用双引号交换了单引号,强制结合了添加和删除的连接,但这些组合都不起作用。

谢谢,请指教!

4 个答案:

答案 0 :(得分:2)

update是MySQL保留字,因此您不能将此单词用作列名。

以下是参考资料:

使用反引号转义列,如下所示:

$sql = "INSERT INTO removal_shipment_detail (`request_date`, `order_id`, `shipment_date`, `product`, `product_name`, `delivered`, `quantity`, `local`, `tracking`, `update`) VALUES ('".$request_date."','".$order_id."','".$shipment_date."','".$product."','".$product_name."','".$delivered."','".$quantity."','".$local."','".$tracking."','".$update."')";

旁注:了解prepared statements因为您的查询现在容易受到SQL注入的影响。另请参阅how you can prevent SQL injection in PHP

答案 1 :(得分:1)

如果您使用的是MySQLi,可以使用以下方法检查SQL错误:

面向对象的风格

if (!$mysqli->query("QUERY_HERE")) {
    printf("Errormessage: %s\n", $mysqli->error);
}

程序风格

if (!mysqli_query($con, "QUERY_HERE")) {
    printf("Errormessage: %s\n", mysqli_error($con));
}

可以在PHP: mysqli:$error

中找到更多信息

此外,我不喜欢将字符串与.连接起来,如果没有必要(它总是难以阅读)。您的语法如下:

$sql = "INSERT INTO removal_shipment_detail (`request_date`, `order_id`, `shipment_date`, `product`, `product_name`, `delivered`, `quantity`, `local`, `tracking`, `update`) VALUES ('$request_date','$order_id','$shipment_date','$product','$product_name','$delivered','$quantity','$local','$tracking','$update')";

答案 2 :(得分:1)

尝试使用intval

$sql = "INSERT INTO removal_shipment_detail 
    (request_date, order_id, shipment_date, product, product_name, delivered, quantity, local, tracking, update) 
VALUES
    ('".$request_date."','".$order_id."','".$shipment_date."','".$product."','".$product_name."','".$delivered."',".intval ($quantity).",'".$local."','".$tracking."','".$update."')";

答案 3 :(得分:0)

首先,如果数量是INT,则不需要用引号括起来。

其次,避免使用诸如"更新"等保留字。为您的字段名称。它可能会混淆数据库引擎。

Rajdeep Paul的回答也不错,但他未能谈论具有INT数据类型的数量字段。

试试这个

$sql = "INSERT INTO removal_shipment_detail (request_date, order_id, shipment_date, product, product_name, delivered, quantity, local, tracking, update1) VALUES ('".$request_date."','".$order_id."','".$shipment_date."','".$product."','".$product_name."','".$delivered."',".$quantity.",'".$local."','".$tracking."','".$update."')";

请注意,字段名称"更新"已更改为" update1"为了避免混淆sql解释器,还删除了数量值周围的引号。

我希望这会有所帮助。