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

ale*_*lex 28 php null

当我想要空白值时,我常常设置这样的东西.

$blankVar = '';
Run Code Online (Sandbox Code Playgroud)

几个月后,我认为这看起来更好,意图更清晰.

$blankVar = null;
Run Code Online (Sandbox Code Playgroud)

这种情况暂时没有打嗝,但最近有一个PDO准备好的陈述我遇到了一个问题.将值绑定为null会导致查询失败,而将其绑定到''则不会.我需要将它绑定为null,以便在满足条件时,它将插入空白数据.

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

define('EMPTY', '');
Run Code Online (Sandbox Code Playgroud)

gah*_*ooa 47

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

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

然而,Null是一种不同的动物.使用Null 的主要不兼容性是你无法判断它是否是set().

$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
Run Code Online (Sandbox Code Playgroud)

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

说到数据库列,PHP的NULL没有位置. 你看,SQL是一种基于字符串的语言.SQL的NULL必须NULL用没有引号表示.

因此,如果您想要一个EMPTY字段,请将其设置为""

INSERT INTO foo SET bar = ""
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO foo SET bar = NULL
Run Code Online (Sandbox Code Playgroud)

很大的区别.

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

  • 感谢您将您的部分包含在SQL中. (2认同)

Rex*_*x M 21

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