如何使用 PHP 将 NULL 插入十进制类型列?

Posted

技术标签:

【中文标题】如何使用 PHP 将 NULL 插入十进制类型列?【英文标题】:How to insert NULL into decimal type column using PHP? 【发布时间】:2019-08-06 00:49:10 【问题描述】:

我正在尝试将NULL 插入到名为price 的列中,该列的类型为Decimal

该列可以为空,默认为NULL。我想插入NULL,只有在 html 表单的“价格”输入中没有输入任何内容时。这是我的 php 代码:

$item_name = $con->real_escape_string($_POST['item_name']);
$price = $con->real_escape_string($_POST['price']);

$con->query("INSERT INTO items (item_name,price) VALUES ('$item_name','$price')");

使用上面的代码,当我将“价格”输入留空时,0.00 被插入到数据库中。

我很确定,当“价格”输入字段为空时,$priceNULL,因为我尝试过:

if ($price == NULL) 
  $price == 4;

并且4.00 被插入到数据库中。

我也试过了:

$con->query("INSERT INTO items (item_name,price) VALUES ('$item_name',NULL)");

并且NULL 被插入到数据库中。

$priceNULL 时,如何将NULL 插入price

【问题讨论】:

@EdBanga 谢谢。我查看了这个问题的答案,但我尝试声明 $price = NULL0.00 仍插入到数据库中。 使用 ('$item_name',NULLIF('$price', ''))"); @EdBangga 非常感谢。这适用于删除一个“)”。如果您将此作为答案发布,我将很乐意接受它作为解决方案。再次感谢。 【参考方案1】:

这是在价格列中插入 null 的方法。

$con->query("INSERT INTO items (item_name,price) VALUES ('$item_name',NULLIF('$price', ''))");

【讨论】:

【参考方案2】:

首先停止使用real_escape_string。您应该改用准备好的语句。它将帮助您解决问题!

正确的做法如下:

$item_name = $_POST['item_name'];
$price = $_POST['price'] ?: null; // make the value null if it is empty
$stmt = $con->prepare("INSERT INTO items (item_name,price) VALUES (?,?)");
$stmt->bind_param('ss', $item_name, $price);
$stmt->execute();

?: 运算符可以在 PHP 中用于在变量为空时指定默认值。

【讨论】:

【参考方案3】:

如果您希望默认值为 null,则必须使用空白,而不是 null。

一个例子:

例如:mysql_query("INSERT INTO number1,number2 VALUES(NULL,1)");

【讨论】:

以上是关于如何使用 PHP 将 NULL 插入十进制类型列?的主要内容,如果未能解决你的问题,请参考以下文章

无法将值 NULL 插入列 - 如何强制标识增加? [关闭]

如何将具有外键的列修改为 null?

在 Redshift 中将 null 插入整数类型列

使用默认 FIREBIRD 将 null 插入非 null 列

如何将null插入数据库?

mybatis插入数据传入值为null时提示无效的列类型