PDO::引用空值、布尔值等


PDO::quote with nulls, bools, and more

PDO::quote 似乎总是在两个单引号上打耳光,无论我传递的值类型如何,或者我设置的参数类型如何。

例如,

$x = null;
echo $pdo->quote($x,PDO::PARAM_NULL); // ''

因此,我用自己的函数扩展了PDO类,

public function quote($value, $parameter_type=PDO::PARAM_STR) {
    if(is_null($value)) return 'NULL';
    elseif(is_bool($value)) return $value ? 'TRUE' : 'FALSE';
    elseif(is_int($value)||is_float($value)) return $value;
    return parent::quote($value, $parameter_type);
}

我错过了任何案例吗?这样做有什么坏处吗?

不同的参数类型有什么作用吗?

根据文档,调用quote()的结果取决于 PDO 驱动程序,因为不同的数据库以不同的方式转义字符串。 因此,某些驱动程序可能需要在与其他驱动程序不同的地方引用报价。 但实际上,如果你知道你不需要引号,那么你不应该打电话给quote().

至于你的功能,这取决于你想做什么。 如果您尝试构建与数据库无关的数据访问层,则您的函数将中断某些数据库。 这是因为并非所有数据库都有布尔类型,例如,SQLite 中没有 TRUE 这样的值。

但实际上,最好只使用准备好的语句,根本不碰quote()。 毕竟,即使是报价文档也这么说。