处理PHP PDO postgres中的布尔输入?

Man*_*noi 5 php postgresql pdo

有没有更好的方法来处理PHP中的postgres PDO驱动程序的布尔输入?

在PHP中,PDO将布尔值false转换为""并将true转换为"1".这会在某些语句中导致这样的错误:

00000 - 7 - ERROR:  invalid input syntax for type boolean: ""
Run Code Online (Sandbox Code Playgroud)

我将我的变量传递给PDOStatement :: execute作为输入数组.

目前我正在使用此变通方法传递适当的字符串

':somevar'    => ($this->somevar === true ? 'true' : 'false')
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

我知道PDOStatement :: bindParam有明确的data_type.我想知道将params数组中的boolean传递给PDOStatement :: execute()的选项.

更新:添加了确切的代码

$qparams = array(
    ':id'            => $this->id,
    ':somevar'       => ($this->somevar === true ? 'true' : 'false'),
    ':updated_on'    => $timestamp
);

$sql = 'UPDATE ' . SONG_ARTISTS . ' SET ' .
    'id = :id, ' .
    'somevar = :somevar, ' .
    'updated_on = :updated_on ' .
    ' WHERE ' .
    ' id = :id';

$stmt = $pdo_handle->prepare($sql);
$result = $stmt->execute($params);
Run Code Online (Sandbox Code Playgroud)

Iva*_*gin 11

默认情况下,PDO将所有数据视为字符串.bool false cast to string是空字符串.Postgres不会将空字符串作为布尔值false.

所以不,没有别的办法.您可以将参数绑定为PDO_PARAM_BOOL,也可以像现在一样手动预转换.