绑定空值时应该/必须使用 PDO::PARAM_NULL 吗?

Svi*_*ish 5 php pdo mariadb

当使用 PDO 准备 SQL 查询时,我应该/必须这样做

$query->bindValue('column', $value, is_null($value) ? PDO::PARAM_NULL : PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)

或者我可以直接使用PDO::PARAM_INTor PDO::PARAM_STR,因为 PDO 会自己计算出来?(在我看来,这确实是应该的)


作为一个好奇的后续问题,如果我不必使用PDO::PARAM_NULL,它实际上是做什么用的?

Dha*_*man 4

不,您不需要使用PDO::PARAM_NULL. 如果将 NULL 与任何类型绑定,则 PDO 将在内部使用 NULL。该值不会转换为字符串、数字或任何其他类型。NULL 将保持为 NULL。

当您将类型设置为PDO::PARAM_NULL它时,相当于将值设置为 NULL。有人可能会认为这PDO::PARAM_NULL是无用的,因为将 NULL 与任何其他类型绑定时都可以获得相同的结果。

以下语句都将绑定文字 NULL 值。

$str = 'someString';
$stmt->bindParam(1, $str, PDO::PARAM_NULL); 

$str = null;
$stmt->bindParam(1, $str, PDO::PARAM_STR);

$stmt->bindValue(1, null); 
Run Code Online (Sandbox Code Playgroud)