【问题标题】:Handle boolean input in PHP PDO postgres?在 PHP PDO postgres 中处理布尔输入?
【发布时间】:2015-11-07 19:45:01
【问题描述】:

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

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

00000 - 7 - ERROR:  invalid input syntax for type boolean: ""

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

现在我正在使用这个解决方法来传递适当的字符串

':somevar'    => ($this->somevar === true ? 'true' : 'false')

有没有更好的办法?

我知道带有显式 data_type 的 PDOStatement::bindParam。我想知道将参数数组中的布尔值传递给 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);

【问题讨论】:

  • 请显示您用于准备和绑定参数的确切代码。
  • @deceze 我已经为问题添加了更多代码。
  • 您是否尝试过禁用 EMULATE_PREPARES?
  • 是的,尝试过 EMULATE_PREPARES。不工作。

标签: php postgresql pdo


【解决方案1】:

默认情况下,PDO 将所有数据视为字符串。 Bool false cast to string 是空字符串。 Postgres 不会将空字符串作为 boolean false。

所以不,没有其他办法。要么将参数绑定为 PDO_PARAM_BOOL,要么像现在这样手动进行预转换。

【讨论】:

    猜你喜欢
    • 2015-09-30
    • 2021-11-29
    • 2019-08-07
    • 2012-10-02
    • 2012-09-21
    • 2010-11-21
    • 2011-09-25
    • 2020-12-15
    • 2022-11-03
    相关资源
    最近更新 更多