在 PHP 中,NULL 和将字符串设置为等于 2 个单引号有什么区别

2022-08-30 15:05:52

我曾经在想要空白值时设置这样的东西。

$blankVar = '';

几个月后,我决定这看起来更好,并且有更清晰的意图。

$blankVar = null;

这在一段时间内没有打嗝,但是最近使用PDO准备的语句,我遇到了一个问题。将值绑定到 null 会使查询失败,而将其绑定到 “” 则不会失败。我需要将其绑定到 null,以便在满足条件时插入空白数据。

这两者之间有什么区别?我仍然认为等于null(或至少是一个常量)看起来更好,所以我应该这样做吗?

define('EMPTY', '');

答案 1

Null 只是 PHP 中的另一种数据类型,它只有一个值 (null)。由于PHP是一种松散的类型语言,因此它可能会混淆它如何处理不同的值。

"", 0, "0", False, array(), Null在 PHP 中都被认为是 False。

然而,Null是一种不同的动物。与使用 Null 的主要不兼容性在于您无法判断它是否 isset()。

$x = false;
isset($x)  ->  true
echo $x    ->  ""

$y = null;
isset($y)  ->  false
echo $y    ->  ""

//$z is not set
isset($z)  ->  false
echo $z    ->  E_NOTICE

因此,null很奇怪,因为它不遵循PHP中的正常变量规则(至少是一些)。在大多数情况下,这很好。

当涉及到数据库列时,PHP的NULL在那里没有位置。你看,SQL是一种基于字符串的语言。SQL 的 NULL 必须用不带引号表示。NULL

因此,如果您想要一个空字段,请将其设置为“”

INSERT INTO foo SET bar = ""

但是,如果您想要一个 NULL 字段,请将其设置为 NULL

INSERT INTO foo SET bar = NULL

大不同。

但是,如果您尝试直接插入PHP NULL,它将向查询添加零字符(这会给您留下空白或语法错误,具体取决于您是否引用它)。


答案 2

null 是编程语言中的一个特殊占位符值,字面意思是“无”。它不是0,它不是一个空字符串,它什么都不是。被指向的内存中没有价值。另一方面,空字符串仍然是一个字符串对象,只是一个非常短:)


推荐