有谁能告诉我如何正确插入NULL?我似乎无法使其发挥作用。
我的HTML表单填充了$ product_lights_total和$ product_releasedate。当它们在数据库中为NULL时,我选择要编辑的产品,在HTML表单中这些选项显示为空/空白,但是当我提交表单时没有更改,刷新后这些字段变为0和00-00-0000。
我有一堆varchar(xx)列,我与本例中的列一起更新,有时使用与下面相同的方法为NULL,并且它工作正常。那些留空。我把它们从这个例子中移除了以保持尺寸不变。
// First, grab the info needed to populate my HTML form for the selected product
if (isset($_GET['id'])) {
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
$get_item_stats = mysqli_query($link, "SELECT * FROM products WHERE id='$id'");
}
$row = mysqli_fetch_assoc($get_item_stats);
if (!$row) {
$error = 'Error.';
$link = '.';
include 'error.php';
exit();
}
if ($row['lights_total'] == NULL) {
$product_lights_total = NULL;
} else $product_lights_total = $row['lights_total'];
if ($row['releasedate'] == NULL) {
$product_releasedate = NULL;
} else $product_releasedate = $row['releasedate'];
// if the form is submitted, insert the values present in the form
if(isset($_POST['submit'])) {
$lights_total = mysqli_real_escape_string($link, $_POST['lights_total']);
$releasedate = mysqli_real_escape_string($link, $_POST['releasedate']);
$edit_item = "UPDATE products SET lights_total='$lights_total', releasedate='$releasedate' WHERE id='$productid'";
$result = mysqli_query($link, $edit_item);
if (!$result) {
$error = 'Error.';
include 'error.php';
exit();
}
else
// do stuff
}
编辑以显示表格结构:
releasedate DATE DEFAULT NULL,
lights_total tinyint(4) DEFAULT NULL
如果我在mysql中选择这些值,它们将返回NULL(假设它们在我的初始数据库填充中插入了它们)。它们只使用上面的PHP代码从NULL更改。
答案 0 :(得分:0)
检查日期列的数据类型,它可能是日期或日期时间,它不会取空值。您可以执行以下操作之一 或者为该列设置默认值 或将数据类型更改为varchar 或尝试在表结构中允许null值 希望这有帮助:)
答案 1 :(得分:0)
*强调文本*首先,您应该实际检查POST数据中的值以确保它们具有预期值 - mysqli_real_escape_string()将提供一些SQL注入攻击保护,但不是全部。如果在检查后它是有效的"空白" value,然后插入NULL
要做到这一点,
UPDATE products SET lights_total=NULL, releasedate='$releasedate' WHERE id='$productid'";
没有NULL上的引号
或者,改为使用变量:
$lights_total = "NULL";
UPDATE products SET lights_total=$lights_total, releasedate='$releasedate' WHERE id='$productid'";
在这种情况下引用NULL
答案 2 :(得分:0)
PHP NULL
将在您的查询中添加为''
。您需要稍微更改一下代码:
$product_lights_total = $row['lights_total'] == NULL
? "NULL"
: "'".$row['lights_total']."'";
$product_releasedate = $row['releasedate'] == NULL
? "NULL"
: "'".$row['releasedate']."'";
//...
$edit_item = "
UPDATE products
SET lights_total = $lights_total,
releasedate = $releasedate
WHERE id = $productid";
//...
答案 3 :(得分:0)
您未插入null
,实际插入了''
这是因为当转换为字符串时,PHP null
是空字符串,并且您在MySQL引号中包装该空字符串。
你可以解决它:
"... releasedate = ".($releasedate ? "'".$releasedate."'" : "null")." ..."
但实际上你应该使用预备语句 - 将null
传递给它,你将插入null
,没有麻烦。